1.?
定义:用?修饰的常量或者变量,代表这是一个可选类型的常量或者变量,就是说这个量可以有值,也可以没有值。如下例子,如果num有值就是int类型,如果没有值那就是nil
例子:
let num: Int? // nil类型
let num: Int? = 2 // int类型
2.!
定义:如果要 *** 作一个可选类型的变量,并且你需要进行强解包的时候,你就会用到!。如果有值就会得到变量的值,如果为nil那么程序就会crash
例子:
// 定义一个String的可选类型str,显示赋值,不会crash,正常。
var str: String? = "皇晓晨"
let message = "你好" + str!
print(message)
// 定义一个String的可选类型str,不进行显示赋值,会crash
var str: String?
let message = "你好" + str!
print(message)
Fatal error: Unexpectedly found nil while unwrapping an Optional value (致命错误:在展开可选值时意外发现nil)
3.as
定义:有保证的转换,从派生类转换为基类的向上类型
场景1:(从派生类转换为基类,向上转型)
class Animal {}
class Cat: Animal {}
let cat = Cat {}
let animal = cat as Animal
场景2:(数值类型转换,消除二义性)
let num1 = 10 as CGFlot
let num2 = 10 as Int
let num3 = (10 / 2) as Double
场景3:(switch语句中进行模式匹配)
switch animal {
case let cat as Cat:
print("如果是Cat类型对象,则做相应处理")
case let dog as Dog:
print("如果是Dog类型对象,则做相应处理")
default: break
}
4.as!
定义:强制类型转换,向下转型时使用,如果转换失败会报runtime运行错误
例子:
class Animal {}
class Cat: Animal {}
let animal: Animal = Cat()
let cat = animal as! Cat
5.as?
定义:与as! *** 作符的转换规则完全一样,但是as?如果转换不成功的时候便会返回一个nil对象。成功的话返回可选类型值。由于as?在转换的时候也不会出现错误,所以对于如果能确保100%会成功的转换则可以使用as!,否则用as?
例子:
let animal: Animal = Cat()
if let cat = animal as? Cat {
print("转换成功~")
} else {
print("转换失败,是个nil")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)