【发布时间】:2015-09-10 11:11:30
【问题描述】:
在 Xcode7.0 GM Seed 中,我尝试了这段代码。
import UIKit
protocol P {
var n: String { get }
}
enum E: Int, P {
case A = 0
case B = 1
var n: String {
return "aa"
}
}
class C {
var v1: String {
print("-- 2 --")
return v2.n
}
var v2: P! {
didSet {
print("-- 1 --")
print(v1)
}
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let c = C()
c.v2 = E(rawValue: 0)
}
}
期待
-- 1 --
-- 2 --
aa
但结果是,
-- 1 --
-- 2 --
-- 1 --
-- 2 --
-- 1 --
-- 2 --
...
然后崩溃!
当我调用 v2.n 时,v2.didSet 也会被调用。 于是无限循环发生了。
这只发生在 Xcode7(Swift2) iOS8,9 中。 我在Xcode6.4中尝试了同样的代码,但是没有进入死循环。
这是 Swift2 中可能存在的错误吗?
【问题讨论】:
-
我认为这是一个错误。与 Apple 一起提出。