swift之可选链

14 篇文章 0 订阅

一、可选链(optional chaining)

1.1-什么是可选链

/*
可选链(Optional Chaining)是一种可以请求和调用属性、方法及下标脚本的过程,它的可选性体现于请求或调用的目标当前可能为空(nil)。如果可选的目标有值,那么调用就会成功;相反,如果选择的目标为空(nil),则这种调用将返回空(nil)。多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(nil)将导致整个链失效。
*/

1.2-注意事项

/*
1、如果可选项为nil,调用方法,下标,属性失败,结果为nil;
2、如果可选项不为nil,调用方法,下标,属性成功,结果会被包装成可选项;
3、如果结果本来就是可选项,不会进行再次包装;
4、多个?可以连接在一起;
5、如果链中任何一个节点是nil,那么整个链就会调用失败;
*/

1.3-使用

class Car { var price = 0 }
class Dog { var weight = 0 }
class Person {
    var name: String = ""
    var dog: Dog = Dog()
    var car: Car? = Car()
    func age() -> Int { 18 }
    func eat() { print("Person eat") }
    subscript(index: Int) -> Int { index }
}
var person: Person? = Person()
var age1 = person!.age()
var age2 = person?.age()
var name = person?.name
var index = person?[6]
print(age1, age2, name, index)
输出:18 Optional(18) Optional("") Optional(6)
func getName() -> String { "jack" }
// 如果person是nil,不会调用getName() person?.name = getName()

if let _ = person?.eat(){
    print("eat() success.")
} else{
    print("eat() fail.")
}
输出:Person eat
	eat() success.
	
var person:Person?=Person()
var dog=person?.dog
print(dog)
输出:Optional(test.Dog)

var weight = person?.dog.weight
var price=person?.car?.price
print(weight,price)
输出:Optional(0) Optional(0)

test["t1"]?[0] = 111
test["t2"]?[2] += 10
test["t3"]?[0] = 88
print(test["t1"],test["t2"],test["t3"])
输出:Optional([111, 3, 5]) Optional([11, 13, 25]) nil


var num1: Int? = 1
num1? = 10

var num2: Int? = nil
num2? = 10
print(num1,num2)
Optional(10) nil

var dict: [String : (Int, Int) -> Int] = [
    "sum" : (+),
    "difference" : (-)
]
var result = dict["sum"]?(10, 20)
print(result)
Optional(30)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值