1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Cannot subscript a value of type '[String : NSArray]' with an index of type '[String]' のエラー

Last updated at Posted at 2018-06-06

また同じような間違いしそうなので、自分メモです。
尚、知識が激浅なため、誤った記述があるかもしれませんし、曖昧な記述が多いです。ご了承ください。

#エラー文言

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に持つ辞書型を作成。
(プロジェクトにもともとあったので使いまわしてますが、わかりにくいなぁ。。。)

hoge.swift
var menuSections:[String: NSArray] = [:]

        menuSections = ["キー1" : ["値A", "値B", "値C"],
                        "キー2" : ["値A", "値B", "値C", "値D"],
                        "キー3" : ["値A", "値B"],
                        "キー4" : ["値A", "値B"]
        ]
hoge.swift
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // 省略
        let sectionTitle: [String] = [menuSectionTitles[section]]
        let sectionTitles: NSArray = menuSections[sectionTitleStr]!
        return sectionTitles.count
        // 省略
    }

#こうしたらエラーが消えた

hoge.swift
    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自信なさすぎる(勉強し直し始め)ので、ご指摘などあればバシバシコメントしていただけると助かります。。。。

以上です。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?