我正在尝试从条带对象追加某些信息,但我收到错误Ambiguous use of subscript
。我如何解决它?我有多张存储在条带中的卡片,当我打印成功时,我得到了我的卡片的所有信息,出于安全原因,我没有发布控制台。它也会在print(success![i])
行崩溃
if let stripecust = object["Stripe"] as? String{
PFCloud.callFunctionInBackground("Customer", withParameters: ["customerId" : stripecust]) { (success: AnyObject?, error: NSError?) -> Void in
if(error == nil){
print(success)
for(var i = 0; i < success?.count; i++){
print(success![i]) //crashes here with error "fatal error: unexpectedly found nil while unwrapping an Optional value"
if let type = success!["data"] as? [[String:AnyObject]] //error here {
self.cardtype.append(String(type[i]["brand"]!))
}
if let numbercard = success!["data"] as? [[String:AnyObject]] //error here {
self.lastfour.append(String((numbercard[i]["last4"]!)))
}
if let holdercard = success!["data"] as? [[String:AnyObject]] //error here{
self.cardholder.append(String(holdercard[i]["name"]!))
}
}
}else{
print(error)
}
}
}
}
})
}
答案 0 :(得分:0)
这里至少有两个问题。
您的屏蔽声明为我们提供了success: AnyObject?
类型,因此success
是一个可选的AnyObject
,这就是我们可以假设的所有内容。
success!
的任何地方你强行解开那个可选的,声明你知道它在那时不会是零。您的unexpectedly found nil while unwrapping an Optional value
错误表明这不是一个安全或有效的假设。似乎有error
为零但success
也为零的情况。您需要处理或至少更仔细地检查它(保护语句和可选绑定是进行此类检查的绝佳工具)。success!["data"] as? [[String:AnyObject]]
的类型为success
,AnyObject?
不是有效的陈述。 AnyObject
不支持下标运算符。 success
也可能是支持下标的更具体的类型,但现在编译器(或我们这些读你的问题的人)无法知道这一点。看起来success
是一个带有字符串“data”键的字典,因此在尝试使用下标之前可以选择一个选项:if
let successDictionary = success? as? [String: AnyObject],
let data = successDictionary["data"] as? [[String: AnyObject]]
{
...
}