基本了解
在Swift代码会经常看到定义属性或方法参数时类型后面会紧跟一个感叹号( !
)或问号( ?
), 刚开始接触Swift的童鞋就可能不太明白之代表什么意思,一头雾水,开始凌乱了。
本文将带你了解感叹号( ! )与问号( ? )之谜,首先问号( ?
)是可选类型,是用来处理值可能缺失的情况,也就是没有值的情况(也就是OC中NULL); 感叹号( !
)就是与之相反的, 就是一定有值(非可选类型),不存在空值的情况(OC中NULL)。
下面根据不同使用场景来进一步了解感叹号( ! )与问号( ? )之谜
各个场景中的叹号( ! )与问号( ? )
类的属性
class MyClass {
var value: String!
var optionalValue: String? // defaulit is nil, 所有定义为可选类型的,可选值都是nil, 和数据类型没有关系。
}
1. 下面代码,在运行时初始化一个MyClass
实例会发生什么呢?
class MyClass {
var value: String!
var optionalValue: String?
init() {
let _ = value.count
let _ = optionalValue?.count // 可选解析
}
}
程序会崩溃,报以下错误Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
2. 下面代码,在运行时初始化一个MyClass
实例会发生什么呢?
class MyClass {
var value: String!
var optionalValue: String?
init() {
value = "this is string value."
let _ = value.count
let _ = optionalValue!.count // 强解析
}
}
程序会崩溃,和代码片段1报一样的错误Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value