//MARK:-----------可选类型!的用法------------ /* 解包(!的用法) 如果确定一个可选类型的对象的值一定存在,那么我们使用 !进行解包获取它的值,或者使用Optional Binding。 */ let possibleString: String? = "An optional string." print(possibleString!) // 解包,我确定possibleString的值一定存在,不需要每次验证值是否存在 let stringValue = possibleString!.hashValue //解包,这里的!表示“我确定这里的的possibleString一定是非nil的,尽情调用吧” //Optional Binding,等价于上面一行 if let sValue = possibleString { let stringValue = sValue.hashValue } /* 考虑下这一种情况,我们有一个自定义的MyViewController类,类中有一个属性是myLabel,myLabel是在viewDidLoad中进行初始化。因为是在viewDidLoad中初始化,所以不能直接声明为普通值:var myLabel : UILabel,因为非Optional的变量必须在声明时或者构造器中进行初始化,但我们是想在viewDidLoad中初始化,所以就只能声明为Optional:var myLabel: UILabel? 虽然我们确定在viewDidLoad中会初始化,并且在ViewController的生命周期内不会置为nil,但是在对myLabel操作时,每次依然要加上!来强制拆包(?也OK),比如: myLabel!.text = "text" myLabel!.frame = CGRectMake(0,10,10) 对于这种类型的值,我们可以直接这么声明:var myLabel: UILabel!,这种是特殊的Optional,称为Implicitly Unwrapped Optionals,直译就是隐式拆包的Optional,就等于说你每次对这种类型的值操作时,都会自动在操作前补上一个!进行拆包 */ //你可以把 隐式解包可选类型 当成对每次使用的时候自动解包的可选类型。即不是每次使用的时候 在变量/常量后面加!,而是直接在定义的时候加! let assumedString: String! = "An implicitly unwrapped optionalstring." print(assumedString) //访问其值时无需感叹号 /*总结 ! 使用场景 强制对Optional值进行解包(unwrap) 声明 隐式拆包的可选类型(Implicitly Unwrapped Optionals)值,一般用于类中的属性 */
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。