Swift学习之可选类型
2018-07-27 本文已影响1人
coderhlt
一、定义可选类型
1. 完整定义可选类型
var name : Optional<String> = nil
2. 语法糖
var name : String? = nil
二、可选赋值
赋值方式一:
name = Optional("11111")
赋值方式二:
name = "mmm"
可选变量设置为没有值
var serverResponseCode: Int? = 404
serverResponseCode = nil//你可以通过给可选变量赋值一个 nil 来将之设置为没有值.
var surveyAnswer: String?
// 如果你定义的可选变量没有提供一个默认值,变量会被自动设置成 nil 。
三、可选取值
- 1、强制展开
在可选的名字后面加一个感叹号 ( ! ) 来获取值,感叹号的意思就是说“我知道这个可选项里边有值,展开吧。”这就是所谓的可选值的强制展开。
let convertedNumber:Int? = 12
let value = convertedNumber!
print(value)
- 2、判断可选是否包含值
强制展开是非常危险的, 如果可选类型为nil,那么强制解包就会崩溃。因此在强制展开前要确保可选有值。
//利用相等运算符 ( == )和不等运算符( != )。如果一个可选有值,他就“不等于” nil 。
let convertedNumber:Int? = 12
if convertedNumber != nil {
let value = convertedNumber!
print("可选包含值\(value )")
}
- 3、可选绑定
可以使用可选项绑定来判断可选项是否包含值,如果包含就把值赋给一个临时的常量或者变量。可选绑定可以与 if 和 while 的语句使用来检查可选项内部的值,并赋值给一个变量或常量。
let convertedNumber:Int? = 12
if let newconvertedNumber = convertedNumber {
let value = newconvertedNumber
print("可选包含值\(value)")
}
四、隐式展开可选项
有时在一些程序结构中可选项一旦被设定值之后,就会一直拥有值。在这种情况下,就可以去掉检查的需求,也不必每次访问的时候都进行展开,因为它可以安全的确认每次访问的时候都有一个值。这种类型的可选项被定义为隐式展开可选项。通过在声明的类型后边添加一个叹号( String! )而非问号( String? ) 来书写隐式展开可选项。
//可选字符串
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
//你可以把隐式展开可选项当做在每次访问它的时候被给予了自动进行展开的权限,你可以在声明可选项的时候添加一个叹号而不是每次调用的时候在可选项后边添加一个叹号。
//你可以像对待普通可选一样对待隐式展开可选项来检查里边是否包含一个值:
if assumedString != nil {
print(assumedString)
}
// prints "An implicitly unwrapped optional string."
你也可以使用隐式展开可选项通过可选项绑定在一句话中检查和展开值:
if let definiteString = assumedString {
print(definiteString)
}