编辑:不重复:
该解决方案给出了'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
可以是 nil
现在我试图访问在另一个文件中传回的值并收到错误:
if let labelString = response["error_description"] as! String?{
self.labelPrompt.text = labelString
}
错误:无法为“字典”类型的值下标?具有“字符串”类型的索引
最佳答案
它是链接问题的副本:您需要在使用下标之前打开字典。
有很多方法(“if let”等),链接的答案通过添加 ?
给出了使用“可选绑定(bind)”的解决方案。在保存字典的变量和下标之间。
Playground 上的例子:
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"
}
关于Swift:无法下标类型为 'Dictionary<String, NSObject>?' 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015990/