16.6 Swift可选链不会增加可选类型的可选性

前端之家收集整理的这篇文章主要介绍了16.6 Swift可选链不会增加可选类型的可选性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

/**

16.6-可选链不会增加可选类型的可选性

我们知道我们通过可选链请求的数据最终会被系统封装成一个可选类型的数据,

考虑一个特殊的情况,如果我们通过可选链请求的数据本身就是一个可选值,那么这个时候系统会怎么做呢?

那系统会把我们这个可选值再封装一层成为可选值的可选值吗?

那到底系统是怎么做的呢?

*/

var x: Int? = 10

var y: Int?? = x

print("x==\(x)")

print("y==\(y)")

/**

x==Optional(10)

y==Optional(Optional(10))

所以说存在 可选值 的可选值

*/

/**

当通过可选链请求的数据为可选类型时可选链的返回值情况。

*/

class CreditCard {

var number: Int

init(number: Int) {

self.number = number

}

}

class Person {

var card: CreditCard?

init(card: CreditCard) {

self.card = card

}

}

var card: CreditCard? = CreditCard.init(number: 233)

var ccard: CreditCard?? = card

print("card==\(card)")

print("ccard==\(ccard)")

/**

card==Optional(swiftLearn15.TestVC5.(viewDidLoad () -> ()).(CreditCard #1))

ccard==Optional(Optional(swiftLearn15.TestVC5.(viewDidLoad () -> ()).(CreditCard #1)))

*/

var p0: Person? = Person.init(card: CreditCard.init(number: 99877))

// 可选链 请求可选类型的数据 ,返回的仍然是一个可选值。不会增加它的可选性,成为可选值的可选值。

print("p0?.card==\(p0?.card)")

/**

p0?.card==Optional(swiftLearn15.TestVC5.(viewDidLoad () -> ()).(CreditCard #1))

*/

猜你在找的Swift相关文章