- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
这两个代码片段有什么区别:
let cell = tableView.dequeueReusableCellWithIdentifier("cellId") as UITableViewCell?
// vs
let cell = tableView.dequeueReusableCellWithIdentifier("cellId") as? UITableViewCell
结果不完全一样吗?
最佳答案
在该代码中没有区别,在这两种情况下它的计算结果都是 UITableViewCell?
真正的区别在于:
在第一种情况下,向下转换为 UITableViewCell?
预计总是会成功(即使它为 nil),因此如果 dequeueReusableCellWithIdentifier
返回的不是实例UITableViewCell
(或从它继承的类的实例),它在运行时失败。该表达式返回一个可选的 UITableViewCell?
在第二种情况下,转换是可选的:如果 dequeueReusableCellWithIdentifier
返回的对象既不是 UITableViewCell
的实例,也不是子类的实例,向下转换优雅地评估为 nil(因此没有运行时错误)。
当然 dequeueReusableCellWithIdentifier
总是返回一个 UITableViewCell
,这就是为什么您的代码没有区别。但在其他情况下可能存在差异,您必须注意这一点以防止运行时错误
关于cocoa - 在 Swift 中使用 as 和 as 向下转型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26057276/
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型。 向上转型 我们在现实中常常这样说:这个人会唱歌。在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们
当使用使用 C 风格继承的 C API 时,(利用 C 结构的标准布局),例如 GLib ,我们通常使用 C 风格的转换来向下转换: struct base_object { int x;
我是一名优秀的程序员,十分优秀!