【发布时间】:2015-07-03 22:57:07
【问题描述】:
为什么在 Swift 中有 as vs. as! vs. as? 类型转换?
【问题讨论】:
-
我不能同意,我在发帖之前已经审查了上述所有问题,根据我的喜好,没有一个以简洁明了且易于理解的方式谈到这 3 种不同的操作。我已经尽可能清楚地说明了这个问题,并结合了未来寻求者的演示代码,因此我不会称其为重复。
标签: swift types type-conversion
为什么在 Swift 中有 as vs. as! vs. as? 类型转换?
【问题讨论】:
标签: swift types type-conversion
as 是编译时强制转换
as? 和 as! 是运行时强制转换
as? 将进行转换,如果无法转换将返回 Optional(nil)as! 将进行强制转换,如果无法进行转换,则会因运行时错误而崩溃? 例子:
class Music { }
class Pop: Music { }
class Rock: Music { }
Pop() as Music // OK, some might disagree but Music *is* a super class of Pop
Pop() as Rock // Compile error: 'Pop' is not convertable to 'Rock'
let pop: AnyObject = Pop()
pop as Music // Compile error: 'AnyObject' is not convertible to 'Music'
pop as? Pop // Pop
pop as! Pop // Pop
pop as? Music // Pop
pop as! Music // Pop
pop as? Rock // nil
pop as! Rock // Runtime error signal SIGABRT
【讨论】:
as?。 as? 是可选的。 as 和 as! 是强制的,as 是安全的,as! 是不安全的。