美文网首页
可选链式调用

可选链式调用

作者: ishadowSR | 来源:发表于2017-10-11 15:19 被阅读0次

可选链式调用是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会成功;如果可选值是nil,那么调用将返回nil。多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为nil,整个调用链都会失败,即返回nil。

import UIKit

var str = "Hello, playground"

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)")

}

var address: Address?

}

class Room {

let 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

}

}

}

let john = Person()

//john.residence = Residence()

func createAddress() -> Address {

print("Function was called.")

let someAddress = Address()

someAddress.buildingNumber = "29"

someAddress.street = "Acacia Road"

return someAddress

}

john.residence?.address = createAddress()

let someAddress = Address()

someAddress.buildingNumber = "29"

someAddress.street = "Acacia Road"

let johnsHouse = Residence()

johnsHouse.rooms.append(Room(name: "Living Room"))

johnsHouse.rooms.append(Room(name: "Kitchen"))

john.residence = johnsHouse

//可选链访问属性

if let roomCount = john.residence?.numberOfRooms {

print("John's residence has \(roomCount) rooms")

}else {

print("Unable to retrive the number of rooms")

}

if (john.residence?.address = someAddress) != nil {

print("It was possible to set the address")

} else {

print("It was not possible to set addresss")

}

//可选链调用方法

if john.residence?.printNumberOfRooms() != nil {

print("It was possible to print the number of rooms.")

} else {

print("It was not possible to print the number of rooms")

}

//可选链访问下标

if let firstRoomName = john.residence?[0].name  {

print("The first rooom name is \(firstRoomName)")

} else {

print("Unable to retrieve the first room name.")

}

var testScores = ["Dave": [86, 82, 84], "Bev": [79, 94, 81]]

testScores["Dave"]?[0] = 91

testScores["Bev"]?[0] += 1

testScores["Brian"]?[0] = 72

print("test1:\(testScores["Dave"])")

print("test2:\(testScores["Bev"])")

print("test3:\(testScores["Brian"])")

if let buildingIdentifier = john.residence?.address?.buildingIdentifier() {

print("John's building identifier is \(buildingIdentifier)")

}

if let beginWithThe = john.residence?.address?.buildingIdentifier()?.hasPrefix("The") {

if beginWithThe {

print("John's building identifier begin with \"The\" .")

} else {

print("John's building identifier does not begin with \"The\". ")

}

}

相关文章

  • swift重温笔记(可选链式调用)

    使用可选链式调用代替强制展开 为可选链式调用定义模型类 通过可选链式调用访问属性 通过可选链式调用调用方法 通过可...

  • 可选链式调用

    可选链式调用(Optional Chaining)wiki 可选链式调用:是一种可以在当前值可能为nil的可选值请...

  • swift-可选链式调用

    结论: 如果你访问的值不是可选的,可选链式调用将会返回可选值(eg: 可选链式调用访问一个String值,将会返回...

  • [iOS笔记]Swift中的可选链式调用的注意点

    通过可选链式调用访问属性 下面代码中的赋值过程是可选链式调用的一部分,这意味着可选链式调用失败时,等号右侧的代码不...

  • Optional Chain(可选链式调用)

    // 可选链式调用//“可选链式调用是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法。如果...

  • Swift学习笔记十三之可选链式调用

    1、可选链式调用:通过点语法调用属性、方法、下标 // 可选链式调用可以在当前值为nil的情况下调用属性,方法,下...

  • 可选链式调用

    可选链式调用是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会...

  • swift 可选链式调用

    可选链式调用是指在当前值可能为ni的情况下,用当前值去获取它的属性、方法及其下标如果可选值有值,调用就会成功如果可...

  • Swift - 可选链式调用

    可选链式调用是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会...

  • Swift可选链式调用

    可选链式调用是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会...

网友评论

      本文标题:可选链式调用

      本文链接:https://www.haomeiwen.com/subject/skewyxtx.html