Что происходит, когда мы вызываем 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 будет работать, потому что это объект

Другие вопросы по тегам