cfi*_*her 15 cocoa downcast swift
这两个代码片段之间的区别是什么:
let cell = tableView.dequeueReusableCellWithIdentifier("cellId") as UITableViewCell?
// vs
let cell = tableView.dequeueReusableCellWithIdentifier("cellId") as? UITableViewCell
Run Code Online (Sandbox Code Playgroud)
结果不完全一样吗?
Ant*_*nio 14
在那个代码中没有区别,在两种情况下它的评估结果都是如此 UITableViewCell?
真正的区别是:
在第一种情况下,UITableViewCell?
预期的向下转换总是成功(即使它是零),所以如果dequeueReusableCellWithIdentifier
返回的东西不是UITableViewCell
(或从其继承的类的实例)的实例,它在运行时失败.表达式返回一个可选项UITableViewCell?
在第二种情况下,强制转换是可选的:如果返回的对象dequeueReusableCellWithIdentifier
既不UITableViewCell
是子类的实例也不是子类的实例,则向下转换优雅地计算为nil(因此没有运行时错误).
当然dequeueReusableCellWithIdentifier
总是返回a UITableViewCell
,这就是为什么代码没有区别的原因.但在其他情况下,可能存在差异,您必须注意这一点以防止运行时错误
归档时间: |
|
查看次数: |
1330 次 |
最近记录: |