Reputation: 11257
I have a very simple example of what I'd like to do
private var data = [String: [[String: String]]]()
override func viewDidLoad() {
super.viewDidLoad()
let dict = ["Key": "Value"]
data["Blah"] = [dict, dict]
}
@IBAction func buttonTap(sender: AnyObject) {
let array = data["Blah"]
let dict = array[0] //<---- error here
println(dict["Key"])
}
Basically, I have a dictionary whose values contain an array of [String: String] dictionaries. I stuff data into it but when I go to access the data, I get this error:
Cannot subscript a value of type '[([String : String])]?' with an index of type 'Int'
Please let me know what I'm doing wrong.
Upvotes: 6
Views: 7517
Reputation: 1941
It doesn't like calling a subscript on an optional.
If you're sure data["Blah"] exists, you should do:
let dict = array![0]
Upvotes: 3
Reputation: 12833
Your constant array
is an optional. Subscripting a dictionary always returns an optional. You have to unwrap it.
let dict = array![0]
Better yet,
if let a = array {
let dict = a[0]
}
Upvotes: 12