swift 可选项和隐式展开可选项

来源:互联网 发布:广东乐普数据科技 编辑:程序博客网 时间:2024/06/05 19:13
  1. 概念
    1.1可选项:定义形式
var surveyAnswer: String?

上面定义了一个变量surveyAnswer,它表示一个可选项变量,即声明了一个值为nil的变量。还可以直接赋值,如下:

var surveyAnswer: String? = "Yeah"

(注意:Swift 中的 nil 和Objective-C 中的 nil 不同,在 Objective-C 中 nil 是一个指向不存在对象的指针。在 Swift中, nil 不是指针,他是值缺失的一种特殊类型,任何类型的可选项都可以设置成 nil 而不仅仅是对象类型。非可选项的变量是不能设置为nil)
可选项的取值形式有两种:强制展开和可选项绑定

//强制展开//一旦你确定可选中包含值,你可以在可选的名字后面加一个感叹号 ( ! ) 来获取值,感叹号的意思就是说“我知道这个可选项里边有值,展开吧。”这就是所谓的可选值的强制展开if convertedNumber != nil {    print("convertedNumber has an integer value of \(convertedNumber!).")}//可选项绑定,如果包含就把值赋给一个临时的常量或者变量if let actualNumber = Int(possibleNumber) {    print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")} else {    print("\'\(possibleNumber)\' could not be converted to an integer")}

1.2 隐式展开可选项
有时在一些程序结构中可选项一旦被设定值之后,就会一直拥有值。在这种情况下,就可以去掉检查的需求,也不必每次访问的时候都进行展开,因为它可以安全的确认每次访问的时候都有一个值。这种类型的可选项被定义为隐式展开可选项,通过在声明的类型后边添加一个叹号( String! )而非问号( String? ) 来书写隐式展开可选项。
隐式展开可选项主要被用在 Swift 类的初始化过程中。

//可选项展开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)}//可选项绑定if let definiteString = assumedString {    print(definiteString)}//与可选项区别:展开后面不需要加"!"

参考:https://www.cnswift.org/the-basics

原创粉丝点击