[英]Is there any advantage doing a guard let on a table view cell or not?
我见过有人在表视图委托中编写此代码
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell? else {
fatalError()
}
...
}
现在考虑这个其他代码
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell
...
}
如果单元没有出列,两个代码不会在同一行崩溃吗?
有什么区别吗? 我没有看到它。
dequeueReusableCell(withIdentifier:)
可以在重用池中没有单元格的情况下返回nil
(即当 tableview 首次显示时)。 当它返回nil
,您有责任实例化适当类型的单元格。
因此,这段代码:
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell? else {
fatalError()
}
说“如果您从重用池中获得一个单元格并且它不是SuitCell
的实例,则崩溃,但nil
是可以的”(注意SuitCell
转换为可选)
虽然这段代码:
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell
说“如果你没有得到SuitCell
的实例就会崩溃,或者你得到nil
”,所以当 tableview 第一次显示时它会崩溃。
dequeueReusableCell(withIdentifier:)
真的不再使用了。 您将使用较新的(但自 iOS 6 以来仍然存在) dequeueReusableCell(withIdentifier:,for:)
变体,因为它总是返回一个单元格,并且您可以期望它是正确的类(或者您会在开发过程中很快发现问题) :
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as! SuitCell
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.