使用阵列而不是 NSArray 时出现错误"ambiguous reference to member subscript"



我在词典中遇到了"歧义对成员下标"的错误,该字典可能包含数组类型值,当我尝试访问阵列类型值然后获取错误时。请检查下面的代码。

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类型的nsarray键入以下行时,我想以纯swift方式进行操作,不想添加Objective-C。

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

尝试以下:

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)
}

swift 是一种强烈键入的语言,因此,您无法访问通用容器,就像您能够在目标C 中一样使用NSArray

您需要明确告诉合格器,您期望从字典中检索哪种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] 

最新更新