作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试执行 GET 请求,并将以下结果保存到 NSMutuableArray 中。然后我尝试将我进入的以下数据加载到 TableView 中,但每当我尝试配置行数时,我都会收到“在展开可选值时意外发现 nil”。
var dataArray:NSMutableArray?
Alamofire.request(.GET, "SOMERANDOMWEBSITE") .responseJSON { response in
// using if-let syntax to save json into our NSMutuableArray
if let JSON = response.result.value {
self.dataArray = JSON as? NSMutableArray
}
}
当我尝试配置行数时:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return self.dataArray.count
}
它给了我一个错误:“在展开可选值时意外发现 nil”。但奇怪的是,当我创建一个随机按钮以查看 .count 是否确实为 nil 时:
@IBAction func function(sender: AnyObject) {
print(self.dataArray?.count)
}
它返回 Optional(2) 而不是 nil。有什么想法吗?
最佳答案
您将数组设为可选。我们可以在这里看到:
print(self.dataArray?.count)
所以直到它被填充到 Alamofire 的闭包中(网络请求发生在后台),它是 nil。
你引用:
return self.dataArray.count
但实际上你可能已经做到了
return self.dataArray!.count
这就是它崩溃的原因。
因此当它为 nil 时,您必须为计数声明另一个选项。一个解决方案可能是安全地解包数组然后返回计数或返回默认值:
if let array = self.dataArray {
return array.count
}
return 0
同样的逻辑可以在一行中表达,@brian-nickel 在评论中指出:
return self.dataArray?.count ?? 0
此外,正如@vadian 在评论中所述,绝对地,可选数组在这里毫无意义,最好从一开始就使用一个非可选的空数组。
关于ios - 解包可选值时意外发现 nil,但有一些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35023914/
我是一名优秀的程序员,十分优秀!