如何获取条带信息?
How can I get the stripe information?
我正在尝试从条带对象附加某些信息,但出现错误 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)
}
}
}
}
})
}
你这里至少有两个问题。
您的块声明为我们提供了 success: AnyObject?
类型,因此 success
是可选的 AnyObject
,这就是我们可以假设的全部内容。
- 在你使用
success!
的任何地方,你都在强制展开那个可选的,声明你 知道 在那个时候它不会是 nil 。您的 unexpectedly found nil while unwrapping an Optional value
错误表明这不是一个安全或有效的假设。似乎有些情况 error
为零,但 success
也为零。您需要处理它或至少更仔细地检查它(保护语句和可选绑定是进行此类检查的好工具)。
success!["data"] as? [[String:AnyObject]]
不是有效的语句,因为 success
的类型是 AnyObject?
。 AnyObject
不支持下标运算符。 success
也可能是支持下标的更具体的类型,但现在编译器(或我们这些正在阅读您的问题的人)无法知道这一点。看起来 success
是一个带有 String "data" 键的字典,所以一个选择是在尝试使用下标之前先转换它:
if
let successDictionary = success? as? [String: AnyObject],
let data = successDictionary["data"] as? [[String: AnyObject]]
{
...
}
我正在尝试从条带对象附加某些信息,但出现错误 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)
}
}
}
}
})
}
你这里至少有两个问题。
您的块声明为我们提供了 success: AnyObject?
类型,因此 success
是可选的 AnyObject
,这就是我们可以假设的全部内容。
- 在你使用
success!
的任何地方,你都在强制展开那个可选的,声明你 知道 在那个时候它不会是 nil 。您的unexpectedly found nil while unwrapping an Optional value
错误表明这不是一个安全或有效的假设。似乎有些情况error
为零,但success
也为零。您需要处理它或至少更仔细地检查它(保护语句和可选绑定是进行此类检查的好工具)。 success!["data"] as? [[String:AnyObject]]
不是有效的语句,因为success
的类型是AnyObject?
。AnyObject
不支持下标运算符。success
也可能是支持下标的更具体的类型,但现在编译器(或我们这些正在阅读您的问题的人)无法知道这一点。看起来success
是一个带有 String "data" 键的字典,所以一个选择是在尝试使用下标之前先转换它:
if
let successDictionary = success? as? [String: AnyObject],
let data = successDictionary["data"] as? [[String: AnyObject]]
{
...
}