参考资料与链接https://www.cnswift.org
可选项
- 这里有一个值,他等于X
- 这里根本没有值
字符串"123"可以被转换成数字值123,但是字符串"hello,world"不能
var possibleNumber = "123"
var convertedNumber = Int(possibleNumber)
possibleNumber = "hello, world"
convertedNumber = Int(possibleNumber)
//最终的convertedNumber为nil,类型为Int?
//Int?为可选的Int,它要么是Int,要么什么都没有
nil
var serverResponseCode : Int? = 404
serverResponseCode = nil
注意
nil不能用于非可选的变量或常量
var survarAnswer : String?
//如果你定义的可选变量没有提供一个默认值,变量会被自动设置成nil
注意
在 Swift中, nil 不是指针,他是值缺失的一种特殊类型,任何类型的可选项都可以设置成 nil 而不仅仅是对象类型。
if 语句以及强制展开
可以利用if语句通过比较nil来判断一个可选中是否包含值,利用 == 或 !=
if convertedNumber != nil {
print("convertedNumber contains some integer value.")
}
//当里面确定有值时,可以在可选的名字后面加!,来可选值的强制展开
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).")
}
//如果没有用!来强制展开可选项,打印结果为Optional(123)
注意
使用!来获取一个不存在的可选值会导致运行错误,在使用!强展开之前必须确保可选项中包含一个非nil的值
可选项绑定
可选绑定可以与 if 和 while 的语句使用来检查可选项内部的值,并赋值给一个临时的变量或常量
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
}
//这时就可以不用!后缀来强制展开
if语句中包含多可选项绑定,用逗号分隔,如果任一可选绑定结果是 nil 或者布尔值为 false ,那么整个 if 判断会被看作 false 。
if let firstNumber = Int("4") , let secondNumber = Int("10") , firstNumber < secondNumber && secondNumber < 100 {
print("(firstNumber) < (secondNumber) < 100")
}
隐式展开可选项
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation mark
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation mark
//你可以把隐式展开可选项当做在每次访问它的时候被给予了自动进行展开的权限
//你可以在声明可选项的时候添加一个叹号而不是每次调用的时候在可选项后边添加一个叹号。
注意
- 如果你在隐式展开可选项没有值的时候还尝试获取值,会导致运行错误。结果和在没有值的普通可选项后面加一个叹号一样。
- 不要在一个变量将来会变为 nil 的情况下使用隐式展开可选项。如果你需要检查一个变量在生存期内是否会变为 nil ,就使用普通的可选项。