属性 无法通过弱引用设置为 nil
Property is unable to set to nil via weak reference
下面的代码定义了Person
和Apartment
。 Person
实例可能拥有一个 Apartment
,Apartment
可能拥有一个租户(Person
实例)
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { print("\(name) is being deinitialized") }
}
class Apartment {
let unit: String
init(unit: String) { self.unit = unit }
weak var tenant: Person?
deinit { print("Apartment \(unit) is being deinitialized") }
}
var john: Person?
var unit4A: Apartment?
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")
john!.apartment = unit4A
unit4A!.tenant = john
上面的代码片段也可以用图形表示如下。
现在执行以下代码以释放实例john
john = nil
if let per = unit4A!.tenant {
print("\(per.name) is a ghost person") \This line is prented out, isn't it already a set with `nil`?
} else {
print("all nil dude")
}
问题:Xcode没有把tenant
属性设置为nil
(请看最后一张图)
问题:我该如何解决?我已经在 IBM Swift SandBox 上尝试了代码并且运行良好,Xcode 有错误吗?
非常感谢。
游乐场是魔鬼的杰作。在真实的应用程序项目中进行测试,而不是在 playground 中进行测试,您会发现它按预期工作。
下面的代码定义了Person
和Apartment
。 Person
实例可能拥有一个 Apartment
,Apartment
可能拥有一个租户(Person
实例)
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { print("\(name) is being deinitialized") }
}
class Apartment {
let unit: String
init(unit: String) { self.unit = unit }
weak var tenant: Person?
deinit { print("Apartment \(unit) is being deinitialized") }
}
var john: Person?
var unit4A: Apartment?
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")
john!.apartment = unit4A
unit4A!.tenant = john
上面的代码片段也可以用图形表示如下。
现在执行以下代码以释放实例john
john = nil
if let per = unit4A!.tenant {
print("\(per.name) is a ghost person") \This line is prented out, isn't it already a set with `nil`?
} else {
print("all nil dude")
}
问题:Xcode没有把tenant
属性设置为nil
(请看最后一张图)
问题:我该如何解决?我已经在 IBM Swift SandBox 上尝试了代码并且运行良好,Xcode 有错误吗?
非常感谢。
游乐场是魔鬼的杰作。在真实的应用程序项目中进行测试,而不是在 playground 中进行测试,您会发现它按预期工作。