Скажем, у меня есть weak var view: UIView? в моем class Button {}. Есть ли способ узнать, когда view теряет свою ссылку и становится nil?
Я попытался использовать weak var view: UIView? {} (иначе вычисленное свойство), чтобы переопределить set {}, но это не сработало, потому что теперь оно вычисленное свойство и не может хранить слабую ссылку (как раздражает!).
Edit:
@fqdn ответ не работал с этим кодом... Попробуйте его на игровой площадке Xcode
import UIKit
class Test {
weak var target: UIView? {
willSet {
if !newValue { println("target set to nil") }
else { println("target set to view") }
}
}
}
class Button {
var view: UIView? = UIView()
}
var t = Test()
var b = Button()
t.target = b.view
b.view = nil // t.target willSet should be fired here
Ваша консоль вывода должна отображать:
target set to view
target set to nil
Моя консоль отображает
target set to view
b.view является сильной ссылкой для экземпляра UIView. t.target является слабым эталоном. Поэтому, если b.view установлен в nil, экземпляр UIView освобождается и t.target будет равен nil.