Swift学习之可选链式调用
2016-01-19 16:32
531 查看
可选链式
一种在当前值可能为nil的可选值上调用属性、方法、下标的方法,如果可选值有值,则调用成功,否则就返回nil。多个调用可以连接在一起形成一条链,如果整条链的某个节点为nil,则调用不成功,返回nil。class Person { var residence:Residence? } class Residence { var rooms = [Room]() var numberOfRooms:Int{ return rooms.count } subscript(index:Int)->Room{ get{ return rooms[index] } set{ rooms[index] = newValue } } func printNumberOfRooms(){ print("The number of rooms is \(numberOfRooms)") } var address:Address? } class Room { var name:String init(name:String){ self.name = name } } class Address { var buildingName:String? var buildingNumber:String? var street:String? func buildingIdentifier()->String?{ if buildingName != nil{ return buildingName }else if buildingNumber != nil && street != nil{ return "\(buildingNumber)\(street)" }else{ return nil } } } var iyaqi:Person = Person(); if let roomCount = iyaqi.residence?.rooms.count{ print("\(iyaqi)'s rooms count is \(roomCount)") }else{ print("Unable to retrieve the number of rooms ") } let address = Address() address.buildingNumber = "302" address.buildingName = "451" address.street = "明珠路" iyaqi.residence?.address = address //nil.因为residence 为nil var residence:Residence? = Residence() iyaqi.residence = residence iyaqi.residence?.address = address print(iyaqi.residence?.address?.street) // Optional("明珠路") iyaqi.residence?.rooms.append(Room(name:"302")) iyaqi.residence?.numberOfRooms //1 iyaqi.residence?.printNumberOfRooms() //The number of rooms is 1 if let firstRoomName = iyaqi.residence?[0].name{ print("iyaiq's first room name is \(firstRoomName)") //iyaiq's first room name is 302 } iyaqi.residence?[0] = Room(name: "906") print("iyaiq's first room name is \(iyaqi.residence?[0].name)") //iyaiq's first room name is Optional("906") iyaqi.residence?.address?.buildingName //451 if let buildingId = iyaqi.residence?.address?.buildingIdentifier(){ print("iyaqi's buildingIdentifier is \(buildingId)") //iyaqi's buildingIdentifier is 451 } if let prefix = iyaqi.residence?.address?.buildingIdentifier()?.hasPrefix("3") //在buildingIdentifier()后面加个问号代表的是整个表达式的可选值上进行链式调用,而不是buildingIdentifier()本身调用 { }
相关文章推荐
- Swift学习之自动引用计数
- Swift学习之构造过程
- Swift学习之析构
- Swift学习之下标
- Swift学习之继承
- Swift学习之方法
- Swift学习之类和结构体
- Swift学习之属性
- Swift学习之枚举
- swift开发笔记20 图片上传的最简单办法
- Swift学习之闭包
- SWIFT推送之本地推送(UILocalNotification)之二带按钮的消息
- Swift 学习网址
- SWIFT推送之本地推送(UILocalNotification)-1
- 九宫格 Swift提供经典的数组和字典两种集合类型来存储集合数据,使用数组实现一个九宫格程序,
- 如何为Swift进行宏定义
- ios swift 获取设备型号 版本
- Swift 数组,增删改查,常用的操作
- Swift-09-可空链式调用(Optional Chaining)
- Swift - 触摸事件(点击,移动,抬起等)说明及用例