Swift 可选链.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Swift 可选链

Swift 可选链 Swift 可选链 可选链 (Optional Chaining )是⼀种是⼀种可以请求和调⽤属性、⽅法和⼦脚本的过 程,⽤于请求或调⽤的⽬标可能 nil 。 可选链返回两个值: 如果⽬标有值,调⽤就会成功,返回该值 如果⽬标 nil ,调⽤将返回nil 多次请求或调⽤可以被链接成⼀个链,如果任意⼀个节点 nil将导致整条链失效。 可选链可替代强制解析 通过在属性、⽅法、或下标脚本的可选值后⾯放⼀个问号(?) ,即可定义⼀个可选链。 感叹号 (!)强制展开⽅法,属性,下标脚本可 可选链 ? 选链 ? 放置于可选值后来调⽤⽅法,属 ! 放置于可选值后来调⽤⽅法,属性,下标脚本 性,下标脚本 来强制展开值 当可选 nil 输出⽐较友好的错误信 当可选 nil 时强制展开执⾏错误 息 使⽤感叹号(!)可选链实例 class Person { var residence: Residence? } class Residence { var numberOfRooms = 1 } let john = Person() //将导致运⾏时错误 let room ount = john.residence!.numberOfRooms 以上程序执⾏输出结果 : fatal error: unexpectedly found nil while unwrapping an Optional v 想使⽤感叹号 (!)强制解析获得这个⼈residence属性numberOfRooms属性值,将会引 发运⾏时错误,因 这时没有可以供解析的residence值。 使⽤感叹号(!)可选链实例 class Person { var residence: Residence? } class Residence { var numberOfRooms = 1 } let john = Person() // 链接可选residence?属性,如果residence存在则取回numberOfRooms的值 if let room ount = john.residence?.numberOfRooms { print(John 的房间号为 \(room ount)。) } else { print(不能 看房间号) } 以上程序执⾏输出结果 : 不能 看房间号 因 这种尝试获得numberOfRooms的操作有可能失败,可选链会返回Int?类型值,或 者称作可选Int。当residence是空的时候 (上例),选择Int将会 空,因此会出现⽆ 法访问numberOfRooms的情况。 要注意的是,即使numberOfRooms是⾮可选Int (Int?)时这⼀点也成⽴。只要是通过 可选链的请求就意味着最后numberOfRooms总是返回⼀个Int?⽽不是Int 。 为可选链定义模型类 你可以使⽤可选链来多层调⽤属性,⽅法,和下标脚本。这让你可以利⽤它们之间的 复杂模型来获取更底层的属性,并检查是否可以成功获取此类底层属性。 实例 定义了四个模型类,其中包括多层可选链: class Person { var residence: Residence? } // 定义了⼀个变量 rooms,它被初始化为⼀个Room[]类型的空数组 class Residence { var rooms = [Room]() var numberOfRooms: Int { return rooms.count } subscript(i: Int) - Room { return rooms[i] } func printNumberOfRooms() { print(房间号为 \(numberOfRooms)) } var address: Address? } // Room 定义⼀个name属性和⼀个设定room名的初始化器 class Room {

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档