2015-08-14 72 views
1

編輯:不是重複:Swift:無法下標'Dictionary <String,NSObject>?'類型的值

該解決方案提供了'Could not find an overload for 'subscript' that accepts the supplied arguments'錯誤。所以,這不是重複的。

這裏是函數聲明。

 func auth(user: String, pass: String, completion: (returned: Bool, error: Bool, response: Dictionary<String, NSObject>?) ->()){ 

response可以是零 }

現在我想要訪問在另一個文件傳回值,並得到一個錯誤:

 if let labelString = response["error_description"] as! String?{ 
      self.labelPrompt.text = labelString 
     } 

錯誤:不能下標值類型'字典'?與類型的索引「字符串」

enter image description here

+4

可能重複的 '\ [NSObject的:AnyObject \]'與索引類型'String'](http://stackoverflow.com/questions/29994541/cannot-subscript-a-value-of-type-nsobject-anyobject-with-an-index-of-type) – Moritz

+0

它**是**重複。見下面Eric D的正確答案。 (投票) –

回答

3

鏈接問題的重複:你需要的是解開字典使用它與一個標前。

有很多方法(「如果讓」等)和鏈接的答案通過在持有字典和下標的變量之間添加?來給出使用「可選綁定」的解決方案。

實施例在一個遊樂場:

var response: Dictionary<String, NSObject>? = nil 

// NOTICE THE "?" BETWEEN THE VARIABLE AND THE SUBSCRIPT 

if let labelString = response?["error_description"] as? String { 
    println(labelString) // not executed because value for key is nil 
} 

response = ["test":"yep"] 

if let labelString = response?["test"] as? String { 
    println(labelString) // "yep" 
} 

展開字典的另一種方法:

if let responseOK = response, let test = responseOK["test"] as? String { 
    println(test) // "yep" 
} 
的[無法下標類型的值
+1

謝謝。鏈接的答案不起作用;然而,'如果讓responseOK = response,讓test = responseOK [「test」]爲?字符串{println(test)//「是」 }'做過。 – user1107173

+0

不客氣。 :) – Moritz

相關問題