Swift—强制解析&可选绑定&隐式解析可选类型

2016-11-29  本文已影响152人  Windv587

*强制解析*

* init ? 构造函数,?表示不一定能够实例化出对象

* !表示告诉编译器一定有值,编译能够通过,如果运行时没有值就会直接崩溃

* 提示:?和 !是所有刚刚接触Swift 的OC程序员最蛋疼的问题,前期开发要注意多看文档和利用编译器提示解决(option + click)

let url = NSURL(String: "http://www.baidu.com")

'' let url = NSURL(String: "http://www.baidu.com/"美女)

// 如果强制解析OptionalValue, 但是OptionalValue中没有值时会引发一个运行时错误

'' print(url!)

// 需要考虑url是否有值

'' if url != nil{

''  let request = NSURLRequest(URL: url!)

'' }

*可选绑定*

* 不需要考虑url是否有值,能进入{}一定有值

* 不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的赋值给一个常量或者变量

* 可选绑定可以用在if和while语句中

* 提示 : 在实际开发中,使用非常频繁

if let url3 = NSURL(string: "http://www.baidu.com/"){

''  let request = NSURLRequest(URL: url3)

'' }

*隐式解析可选类型(implicitly unwrapped optionals)*

* 有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型\_总会\_有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值

* 隐式解析可选类型, 并不需要每次都使用解析来获取可选值, 一个隐式解析可选类型其实就是一个普通类型,但是可以被当做非可选类型来使用

* 格式: 将可选类型后面的?改为!

let bigButton: UIButton!

* 注意:

> * 如果一个变量之后可能变成nil的话请不要使用隐式解析可选类型。如果你需要在变量的生命周期中判断是否是nil的话,请使用普通可选类型

'' let url3: NSURL? = NSURL(string: "http://www.baidu.com/")

'' let url4: NSURL! = NSURL(string: "http://www.baidu.com/")

'' print(url3!) // 需要惊叹号来获取值

'' print(url4)  // 不需要感叹号

上一篇下一篇

猜你喜欢

热点阅读