Почему этот код вызовет didSet при инициализацииSwift триггер didSet при инициализации
final public class TestDidSet {
static var _shared: TestDidSet! = TestDidSet()
func testA() { }
private var test = true {
didSet {
print("didSet test when initing!!!!!:\(test)")
}
}
private var _value: Bool! {
didSet {
print("didSet when initing!!!!!:\(_value)")
}
}
private init() {
testSet()
_value = false
test = false
}
private func testSet() {
_value = true
}
}
TestDidSet._shared.testA()
любая идея? Должен ли он не запускать didSet? кто-то поможет!
обновление: Моя точка зрения это, testSet()
и _value = false
делает то же самое, но testSet()
вне init()
, так testSet()
вызовет didSet
пока _value = false
нет. Зачем?!
Это не факультативный тип или другая причина, которая вызывает «didSet», я полагаю.
Что вам нужно? вызов testSet() приведет к срабатыванию вашего файла setSet, в то время как значение присваивания не приведет к срабатыванию функции didSet в init. –
[Этот комментарий объясняет это хорошо.] (http://stackoverflow.com/questions/25230780/is-it-possible-to- allow-didset-to-be-called-in-initialization-in-swift # comment39303335_25231068) – Hamish
'didSet' - это сеттер в Swift, такой же' - (void) setTest: (Bool) test; 'в Objective-C. Поэтому он будет вызывать, когда вы присвоите любое значение 'test'. Это не событие его сеттера. – TheTiger