【发布时间】:2014-08-09 21:43:11
【问题描述】:
我使用的是 Xcode6-beta2,但自从第一次公开测试版以来我就遇到了同样的问题。我的 Obj-C UIViewController 的 Swift 子类如下所示:
class SomeVC: UIViewController {
var c1: () -> () = {
println(self)
}
var c2: () -> () {
get {
return { println(self) }
}
}
var c3: () -> () {
return { println(self) }
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
c1()
c2()
c3()
}
}
显示 VC 时,我看到打印出以下几行:
(Function)
<_TtC12SwiftiOSTest6SomeVC: 0x10bf1ed10>
<_TtC12SwiftiOSTest6SomeVC: 0x10bf1ed10>
(c2 和 c3 的不同之处仅在于,如果计算属性只是可获取的,则不需要包含 get {...}。)
所以,第一个闭包的 self 似乎是指函数/闭包类型本身,而其他的 self 指的是视图控制器(正如我所料)。 c1 和 c2/c3 之间的唯一区别是前者是存储属性,后者是计算属性,但我仍然希望闭包和它们捕获的值是相同的,即 self 总是参考封闭类。现在的情况,似乎没有明显的方法让 c1 闭包访问封闭类的方法/属性。
这是某处记录的内容(我阅读了 Swift 书,但没有找到任何内容),还是只是某种 beta 编译器错误,应该在某处提交?
【问题讨论】:
标签: swift