また同じような間違いしそうなので、自分メモです。
尚、知識が激浅なため、誤った記述があるかもしれませんし、曖昧な記述が多いです。ご了承ください。
#エラー文言
Cannot subscript a value of type '[String : NSArray]' with an index of type '[String]'
ほぉ〜〜〜と思って英単語ググってましたけど、
subscript:添え字、下に書いた
subscriptって普通に専門用語( )だったんですね。^^;
ちなみにsubscriptとは、
Dictionary とか Array で hoge["fuga"] みたいな感じで、要素にアクセスするアレ
引用:Swift の Subscript について
だそうです。()
#環境
・Swift 4.0
・Xcode9.4
#つまづいたところ
とりあえず配列をvalueに持つ辞書型を作成。
(プロジェクトにもともとあったので使いまわしてますが、わかりにくいなぁ。。。)
var menuSections:[String: NSArray] = [:]
menuSections = ["キー1" : ["値A", "値B", "値C"],
"キー2" : ["値A", "値B", "値C", "値D"],
"キー3" : ["値A", "値B"],
"キー4" : ["値A", "値B"]
]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// 省略
let sectionTitle: [String] = [menuSectionTitles[section]]
let sectionTitles: NSArray = menuSections[sectionTitleStr]!
return sectionTitles.count
// 省略
}
#こうしたらエラーが消えた
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// 省略
let sectionTitle: [String] = [menuSectionTitles[section]]
let sectionTitleStr: String = sectionTitle[section] // 😇
let sectionTitles: NSArray = menuSections[sectionTitleStr]!
return sectionTitles.count
// 省略
}
※ちなみにtableViewで使おうとしてました。
😇の行で、
let sectionTitleStr: String = sectionTitle[section]
この1行を加えたらエラーはなくなりました。。。。
むむ、とりあえず丁寧に展開しましょうというお話なんですかね。。。
(このとりあえずはよろしくないですが。。。。)
今回は解決方法だけ記載しましたが、すぐにきちんと理論まで理解、追記していきたいと思います。。。。!!
Swift自信なさすぎる(勉強し直し始め)ので、ご指摘などあればバシバシコメントしていただけると助かります。。。。
以上です。