【发布时间】:2014-06-05 14:25:58
【问题描述】:
我正在查看“The Swift Programming Language”一书的“Unowned References and Implicitly Unwrapped Optional Properties”部分中的示例。
他们的示例代码是
class Country {
let name: String
let capitalCity: City!
init(name: String, capitalName: String) {
self.name = name
self.capitalCity = City(name: capitalName, country: self)
}
}
class City {
let name: String
unowned let country: Country
init(name: String, country: Country) {
self.name = name
self.country = country
}
}
如果我想专门处理 Country 并且 City 类型的唯一目的是成为 Country 的首都,则此方法有效。但是如果我想创建一个城市会发生什么?
这会创建一个运行时异常,因为没有保留对 City 的 Country 的引用,因为它是一个无主变量:
var chicago = City(name:"Chicago", country: Country(name: "USA", capitalName: "Washington DC"))
chicago.country.name // Playground execution failed: error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=EXC_I386_GPFLT).
如何在不创建强引用循环的情况下允许这样的事情?
【问题讨论】:
-
在一天结束时,您仍然必须使用与 Objective-c 中相同的策略来处理保留周期。 Swift 只是让表达更容易
标签: swift