当前位置: 首页 > 面试题库 >

使用as和as在Swift中向下转换?

巫马心水
2023-03-14
问题内容

这两个代码段之间有什么区别:

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总是返回a
UITableViewCell,这就是为什么代码没有区别的原因。但是在其他情况下,可能存在差异,因此您必须注意避免运行时错误



 类似资料:
  • 问题内容: 在升级到Swift 1.2之前,我可以编写以下行: 现在它迫使我写这一行: 我的问题是,如果我被迫如上所述编写代码,难道我不能只编写下面的代码,它会做同样的事情吗?在imageDetails的所有值中都可以得到相同的结果吗? 问题答案: as关键字用于进行上下转换: 从派生类到基类的转换可以在编译时检查,并且永远不会失败。 但是,向下转换可能会失败,因为您无法始终确定特定的类别。如果您

  • 问题内容: 在Swift中给出以下内容: 以下两个语句之间的实际区别是什么: 与 问题答案: 实际的区别是: 将是类型的变量。如果基础类型不是a,则将其无害地分配给可选类型。 这就是说,我 知道 这个东西是一个。这也将导致成为类型, 但 如果基础类型为其他类型,则将崩溃。 然后使用第一种样式来安全地打开可选的包装:

  • 问题内容: 我要从字典中解开两个值,在使用它们之前,我必须将它们强制转换并测试正确的类型。这是我想出的: 但是我想将两个查询打包在一起。这样就可以了: 该语法不起作用,所以我想知道是否有一种漂亮的方法可以做到这一点。 问题答案: Swift 3更新: 以下内容将在Swift 3中运行: 请务必记住,如果尝试的可选绑定之一失败,则不会执行该块内的代码。 注意:这些子句不必全部都是’let’子句,您可

  • 我试图将类型转换为布尔值。所以我就这么做了: 但是不是布尔值,它只包含值。然而,当我尝试这个: 返回一个布尔值,该值为false。 我是否遗漏了一些关于“as”演员的内容? 哪一个是正确的转换为布尔值?

  • 主要内容:语法,示例SQL AS 关键字用于为表或字段起一个临时的别名。别名是临时的,它仅在当前 SQL 语句中奏效,数据库中的实际表名和字段名不会更改。 SELECT 命令的结果集中将显示别名,而不是原始名。 通常在下列情况中使用别名: 有两个名字重复的表,需要为其中一个表起一个别名加以区分,比如 SELF JOIN。 两个表中有重复的字段名,起别名加以区分。 表名/字段名较长,或者可读性差。 语法 表别名的基本语

  • JBoss是一套开源的企业级 Java 中间件系统,用于实现基于 SOA 的企业应用和服务。目前 JBoss 已经被 RedHat 收购。 在各种 J2EE 应用服务器中,JBoss 是最受欢迎而且功能最为强大的应用服务器。 主要的特点包括: 1. 具有革命性的JMX微内核服务作为其总线结构; 2. 面向服务的架构(Service-Oriented Architecture,SOA); 3. 统一