Swift(十七、可选链)
1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~ 2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。 十七、可选链1、写于前-概念梳理1.1、可选类型使用时需要解包,解包时需要判断是否为 1.2、可空链式调用:一种可以请求和调用属性、方法和下标的过程,请求和调用目标可能为空。不为空调用成功,为空返回空( 1.3、多层链接: 通过拆分官方文档来说明: class Person {
var residence:Residence?
}
class Residence {
var address:Address?
}
class Address {
var buildingName:String?
var buildingNumber:String?
func buildingIdentifier() -> String? {
if buildingName != nil {
return buildingName
}else if buildingNumber != nil {
return buildingNumber
}else {
return nil
}
}
}
2、可空链式调用访问属性let Zane = Person()
if let number = Zane.residence?.address?.buildingNumber {
print("The buildingNumber of Zane's residence is (number)")
}else {
print("Unable to get the buildingNumber")
}
Output: Unable to get the buildingNumber
可选链任意一个属性为空则返回nil 2.1、设置属性值let myResidence = Residence()
Zane.residence = myResidence
let someAddress = Address()
someAddress.buildingNumber = "218"
Zane.residence?.address = someAddress
if let number = Zane.residence?.address?.buildingNumber {
print("The buildingNumber of Zane's residence is (number)")
}else {
print("Unable to get the buildingNumber")
}
Output: Output:
The buildingNumber of Zane's residence is 218
2.2、访问函数通过可空链来调用 print(Zane.residence?.address?.buildingIdentifier())
Output: Optional("218")
if let buildingIdentifier = Zane.residence?.address?.buildingIdentifier() {
print("Zane's building identifier is (buildingIdentifier)")
}
Output: Zane's building identifier is 218
3、下标可空值访问class Person {
var residence:Residence?
}
class Residence {
var rooms = [Room]()
var numberOfRooms:Int {
return rooms.count
}
subscript(i:Int) -> Room {
get {
return rooms[i]
}
set {
rooms[i] = newValue
}
}
func printNumberOfRooms() {
print("The number of rooms is (numberOfRooms)")
}
}
有一个存储Room类的数组,及房间数属性 class Room {
let name:String
init(name:String) {
self.name = name
}
}
3.1、可选链调用方法let Zane = Person()
if Zane.residence?.printNumberOfRooms() != nil {
print("It was possible to print the number of rooms")
} else {
print("Unable to print the number of rooms")
}
Output: Unable to print the number of rooms
3.2、可选链访问下标访问下标时,问号放在方括号前面 if let firstRoomName = Zane.residence?.rooms[0].name {
//if let firstRoomName = Zane.residence?[0].name { //等同
print("The first room name is (firstRoomName).")
} else {
print("Unable to get the first room name")
}
Output: Unable to get the first room name
定义属性 let myResidence = Residence()
myResidence.rooms.append(Room(name: "Living Room"))
myResidence.rooms.append(Room(name: "BathRoom"))
Zane.residence = myResidence
if let firstRoomName = Zane.residence?.rooms[0].name {
print("The first room name is (firstRoomName).")
} else {
print("Unable to get the first room name")
}
if Zane.residence?.printNumberOfRooms() != nil {
print("It was possible to print the number of rooms")
} else {
print("Unable to print the number of rooms")
}
Output: The first room name is Living Room.
The number of rooms is 2
It was possible to print the number of rooms
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |