Скажем, у меня есть 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.