Xcode8 Beta EXC_BAD_ACCESS 创建弱引用时出现错误

Xcode8 Beta EXC_BAD_ACCESS Error appears when creates weak references

以下代码复制自Weak References section of the Official document

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 //Error!

基本描述了person类型实例和Apartment类型实例之间的强弱引用关系(请看下图)

但是,当我运行代码时,我得到了一个错误。

问题:如何解决?

Mr.Alessandro Orrù 的回复,(我又复制粘贴了一遍还是报错)

这现在可以正常工作了 - 该错误已在 XCode 8 GM Seed 中修复。

原答案:

这是 playgrounds 或 XCode8 beta 3 中的错误。我复制了您的代码,尝试了 Apple 示例,并尝试将其减少到最低限度:

class A { var b:B? }

class B { weak var a:A? }

let b = B()
let a = A()

a.b=b
b.a=a

在 XCode 7.3.1 和 Swift 2.2 中,所有工作都按预期进行。 XCode 8 beta 3 和 Swift 3 全部失败。错误是:

error: Playground execution aborted: error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=EXC_I386_GPFLT).

它只适用于游乐场 - 在应用程序中没问题。 (我尝试了 Mac OS 命令行程序)