Cannot subscript a value of type ‘[AnyObject]?’ with an index of type ‘Int’
エラー文がわかりづらい…
Cannot “subscript” a value of type
subscript とは、配列への要素へアクセスする際の [“hoge”] みたいなもの
//'[AnyObject]?' with an index of type 'Int' の場合は var arr : [AnyObject]? // となっている時に出る。 配列がOptionalだからなので確定してから dict![0] のように取り出せる let dat = arr![0] // 安全に取り出すなら guard を使ったり... guard let dat = arr?[0] else { return } // 辞書型は、 let dict : [String : String] = ["Yamamoto" : "男性"] // に、 dict[0] で取り出すと Cannot subscript a value of type を出すが // こちらはKeyがStringのため ("Yamamoto" の方 let gend = dict["Yamamoto"] //ならいける
この記事を書いた当時は、tabbarの viewControllers は AnyObject だった… だから下のは(言ってることも)違いますが、残してあります
やろうとしたことは、TabBarのviewControllersを比較しようとした時
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { // Cannot subscript a value of type '[AnyObject]?' with an index of type 'Int' var vc : UIViewController = self.viewControllers[1] as! UIViewController; //~~ }
“Cannot subscript a value of type ‘[AnyObject]?’ with an index of type ‘Int'”
あと… viewControllers自体がOptionalなので ! をつける
正解
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { //var vc : UIViewController = self.viewControllers[1] as! UIViewController; var vc : UIViewController = self.viewControllers![1] as! UIViewController; //~~ }
安全のために
if let vc = self.viewControllers?[1] as? UIViewController { }
とか書いたほうがいいかも..
ではでは