得到错误"模糊引用成员下标"使用Array而不是NSArray时

时间:2016-12-06 09:12:50

标签: ios swift swift3

我收到错误,例如"对成员下标的模糊引用"在可能包含数组类型值的字典中,当我尝试访问数组类型值然后获取错误。 请检查以下代码。

var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
"Layme": ["Engineer", "Docter"] 
] as [String : Any]


occupations["Jayne"] = "Public Relations"
var arrOfLayme = occupations["Layme"] as! Array //getting error here, If I use NSArray instead of array all will work as expacted
print(valueOcc[0])

当我使用NSArray类型时,这个代码就像下面一行一样,我想以纯粹的方式做,不想添加Objective-c。

var arrOfLayme = occupations["Layme"] as! NSArray

2 个答案:

答案 0 :(得分:5)

试试这个:

var occupations:[String:Any] = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
    "Layme": ["Engineer", "Docter"]
    ]

occupations["Jayne"] = "Public Relations"


var arrOfLayme = occupations["Layme"] as! [String]
print(arrOfLayme)

//More safe
if let arr = occupations["Layme"] as? [String] {
    print(arr)
}

答案 1 :(得分:2)

Swift 是一种强类型语言,因此,您无法访问通用容器,就像您在目标C 中使用NSArray一样。< / p>

您需要明确告诉编译器,您希望从字典中检索哪种Array

执行以下操作:

import Foundation

// Delcare type next to the variable, not at the end
// Makes the code more readable
var occupations: [String : Any] = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
    "Layme": ["Engineer", "Docter"] 
    ]

occupations["Jayne"] = "Public Relations"

// Safe reading
if let arrOfLayme = occupations["Layme"] as? [String] {
    print(arrOfLayme)
}

// Force casting option 1
var arrOfLayme = occupations["Layme"] as! Array<String>

// Force casting option 2
var arrOfLayme2 = occupations["Layme"] as! [String]