我的产品是空数组。当视图出现时,它有时会提供例外,例如Terminating due to NSRangeException
,Index 0 beyond bounds for empty NSArray
。我想有条件地检查数组的第一个值,但我不知道如何解决它。有人可以建议我如何解决这个问题。此代码位于视图控制器的ViewDidLoad
上。
MCIAPHelper.sharedInstance.requestProductsWithCompletionHandler({ (success, products) -> () in
if success {
NSLog("\(String(describing: products?.count)) product count")
self.fetchedProducts = products as? [SKProduct]
NSLog("\(self.fetchedProducts.count) fetched product")
if let product = products?[0] as? SKProduct { //getting exception in this line
let numberFormatter = NumberFormatter()
numberFormatter.formatterBehavior = NumberFormatter.Behavior.behavior10_4
numberFormatter.numberStyle = NumberFormatter.Style.currency
numberFormatter.locale = product.priceLocale
if let productPrice = numberFormatter.string(from: product.price) {
self.purchaseFullVersionSubtitle.text = "Use this app forever for only \(productPrice)"
}
}
} else {
//TODO: Error Handling
}
})
有人可以建议如何在Swift 3中解决这个问题吗?尝试访问数组[0]
以查找空的NSArray
。
答案 0 :(得分:0)
写这个以检查您的产品阵列是否有任何产品
ProxyPass /login http://127.0.0.1:8080/login/ retry=0
之前
if products != nil && products!.count > 0
答案 1 :(得分:0)
测试这种情况的Swift方法是:
if let product = products?.first as? SKProduct {
....
}
这将检查一个表达式中的三个条件:
products
是非零吗?SKProduct
类型的第一个元素吗?答案 2 :(得分:0)
你可以使用安全的下标解决这类问题,即使你的索引超出范围也不会导致崩溃,这里是代码:
extension Collection {
subscript(safe index: Index) -> Generator.Element? {
return index >= startIndex && index < endIndex ? self[index] : nil
}
}
答案 3 :(得分:-1)
请首先检查产品阵列
if(product.count&gt; 0){
}
要么
如果让productarray_obj = self.fetchedProducts {
}
答案 4 :(得分:-1)
您可以使用警卫解决问题
guard let product = products?[0] as? SKProduct else {
print("Something went wrong")
return
}
let numberFormatter = NumberFormatter()
numberFormatter.formatterBehavior = NumberFormatter.Behavior.behavior10_4
numberFormatter.numberStyle = NumberFormatter.Style.currency
numberFormatter.locale = product.priceLocale
if let productPrice = numberFormatter.string(from: product.price) {
self.purchaseFullVersionSubtitle.text = "Use this app forever for only \(productPrice)"
}
Apple对Guard的评价
警卫声明
guard语句用于将程序控制转移到范围之外 如果不满足一个或多个条件。
警卫声明的格式如下:
guard condition else { statements }