Что происходит, когда мы вызываем setvalueForKey в swift
У меня есть два фрагмента кода ниже, и второй будет зависать во время выполнения, но первый может. Кто-нибудь знает, что там произошло, спасибо большое?
Фрагмент кода 1:
class TestDemo:NSObject {
var prop : Int = 0
}
var obj = TestDemo()
obj.setValue(2, forKey: "prop")
Фрагмент кода 2:
class TestDemo:NSObject {
var prop : Int?
}
var obj = TestDemo()
obj.setValue(2, forKey: "prop")
1 ответ
setValue forKey идет в ваш класс и ищет методы получения с ключом, которого нет, поэтому он будет искать переменные экземпляра. в первом случае он находит переменную, так как var prop:Int = 0 является сохраненным свойством со значением 0
var prop:Int = { return 0 }()
Но во втором случае var prop:Int? является необязательным вычисляемым свойством типа Int?, которое не является объектом и, следовательно, проверяться не будет. изменение его на NSNumber будет работать, потому что это объект