属性 无法通过弱引用设置为 nil

Property is unable to set to nil via weak reference

下面的代码定义了PersonApartmentPerson 实例可能拥有一个 ApartmentApartment 可能拥有一个租户(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 中进行测试,您会发现它按预期工作。