Swiftで配列から値を取り出そうとした時にエラー吐いた

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 {

}

とか書いたほうがいいかも..

ではでは

Atsumi3

したいことをします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください