刚开始学习Swift,下载了他人写的项目,用xcode打开后都会提示错误。将代码中的一些as
修改成as!
就没问题了。在网上找了下缘由,发现了这篇文章—— The as! Operator,翻译以下:objective-c
在Swift 1.2之前,操做符as
根据表达式的类型能够用来执行两种不一样的转换:swift
1 as Float
).Swift 1.2 从概念上将Guaranteed conversion和Forced conversion分红两种不一样的操做符。 Guaranteed conversion仍然用as
操做符,而Forced conversion则用as!
操做符执行。感叹号!
代表这种转换可能会失败,这样你看一眼就知道哪一种代码会致使程序奔溃。xcode
下面用例子展现其区别:安全
class Animal {} class Dog: Animal {} let a: Animal = Dog() a as Dog // now raises the error: "'Animal is not convertible to 'Dog'; // ... did you mean to use 'as!' to force downcast?" a as! Dog // forced downcast is allowed let d = Dog() d as Animal // upcast succeeds
注意将表达式后缀符!
和?
与转换符as!
和as?
作类比:app
class Animal {} class Cat: Animal {} class Dog: Animal { var name = "Spot" } let dog: Dog? = nil dog?.name // evaluates to nil dog!.name // triggers a runtime error let animal: Animal = Cat() animal as? Dog // evaluates to nil animal as! Dog // triggers a runtime error
记住Swift中这些操做符模式的最简单方法是:!
表示“这可能有问题”,而?
表示“这可能为空”。学习