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

  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值