例如
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { print("\(name) is being deinitialized") }
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
var tenant: Person?
deinit { print("Apartment #\(number) is being deinitialized") }
}
var john: Person?
var number73: Apartment?
john = Person(name: "John Appleseed")
number73 = Apartment(number: 73)
john?.apartment?.tenant?.name
john!.apartment = number73
number73!.tenant = john
//john?.apartment = number73
//number73?.tenant = john
john?.apartment?.tenant?.name
看来john?.apartment = number73
,john!.apartment = number73
两者都可行,这两者有什么区别,在这种情况下,首选哪一个?非常感谢。
案件 john?.apartment = number73
john
为nil
,则什么都不做(与nil
在Objective-C中向发送消息相同)john
不是nil
,请分配编号。案件 john!.apartment = number73
john
为nil
,则引发运行时错误,也称为崩溃(著名错误:致命错误:在展开可选值时意外发现nil)john
不是nil
,请分配编号。如果可以确保john
不是nil
,请使用感叹号。
如果john
可能的话nil
,请使用问号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句