2016-12-06 27 views
1

當我嘗試訪問數組類型值時,出現錯誤,如可能包含數組類型值的字典中的「模糊引用成員下標」錯誤。 請檢查以下代碼。當使用Array而不是NSArray獲取錯誤「對成員下標的模糊引用」

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 

回答

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

感謝@Mr。 Bista –

2

斯威夫特是強類型語言,因此,您無法訪問到普通容器,就像你能在目標CNSArray

您需要明確告訴編譯器,您期望從字典中檢索什麼種類的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] 
+0

謝謝@dirtydanee –

相關問題