Я использую Xcode6-beta2, но у меня была такая же проблема с самого первого публичного бета-тестирования. Мой подкласс Swift Obj-C UIViewController выглядит следующим образом:
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 {...} для вычисленного свойства, если оно только gettable.)
Итак, первое замыкание self похоже на сам тип функции/замыкания, тогда как другие self относятся к контроллеру представления (как и следовало ожидать). Единственное различие между c1 и c2/c3 состоит в том, что первое является сохраненным свойством, последние являются вычисленными свойствами, но я все же ожидал бы, что замыкания и их зафиксированные значения будут одинаковыми, т.е. self всегда обратитесь к прилагаемому классу. Теперь, похоже, нет очевидного способа закрытия c1 для доступа к методам/свойствам окружающего класса.
Я где-то это где-то документировал (я читал книгу Swift и ничего не нашел), или это просто ошибка в бета-компиляторе, которую нужно где-то подавать?