Skip to Main Content
iOS 编程基础:Swift、Xcode 和Cocoa 入门指南
book

iOS 编程基础:Swift、Xcode 和Cocoa 入门指南

by Matt Neuburg
January 2017
Intermediate to advanced content levelIntermediate to advanced
552 pages
9h 43m
Chinese
China Machine Press
Content preview from iOS 编程基础:Swift、Xcode 和Cocoa 入门指南
变量与简单类型
109
更长的
Optional
链也是合法的。它们的工作方式与你想象的完全一致:无论链中要展开
多少个
Optional
,如果其中一个被展开了,那么整个表达式就会生成一个
Optional
,它
包装的是
Optional
被正常展开后所得到的类型,并且在这个过程中会安全地失败。比如:
// self.window is a UIWindow?
let f = self.window?.rootViewController?.view.frame
视图的
frame
属性是个
CGRect
。不过在上述代码执行后,
f
并非
CGRect
,它是个包
装了
CGRect
Optional
。如果链中的任何一个展开失败了(由于要展开的
Optional
nil
),那么整个链就会返回
nil
以表示失败。
注意到上述代码并没有嵌套使用
Optional
;并不会因为链中有两个
Optional
就生成
包装到
Optional
中的
CGRect
,然后这个
Optional
又包装到另一个
Optional
中。不过,
出于其他一些原因,我们可以生成包装到另一个
Optional
中的
Optional
,第
4
章将
会给出一个示例。
如果涉及可选展开
Optional
Optional
链生成了一个结果,那么你可以通过检查结果来
判断链中的所有
Optional
是否可以安全展开:如果它不为
nil
,那么一切都可以成功展开。
但如果没有得到结果呢?比如:
self.window?.rootViewController = UIViewController()
现在真是进退维谷。程序当然是不会崩溃的了;如果 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

机器学习实战:基于Scikit-Learn、Keras 和TensorFlow (原书第2 版)

机器学习实战:基于Scikit-Learn、Keras 和TensorFlow (原书第2 版)

Aurélien Géron
Swift 人工智能实战:从基础理论到AI 驱动的应用程序开发

Swift 人工智能实战:从基础理论到AI 驱动的应用程序开发

Mars Geldard, Jonathon Manning, Paris Buttfield-Addison, Tim Nugent

Publisher Resources

ISBN: 9787111556350