Как и в случае с темой, существует класс, я хочу установить значения для свойств во время выполнения, , и я установил значения, которые унаследованы от NSObject, использует KVC mechanism and Reflect mechanism
, и мне также нужно установить значения для тех, кто имеет 't унаследован от NSObject, например dataType: Int, Double
. Как я могу это сделать?Как установить значение для ключа, тип которого является базовым типом данных во время выполнения в swift?
ответ
Подпись setValue(value: Any?, forKey: String)
принимает Any?
вместо AnyObject?
. Поэтому для этого значения необязательно быть подклассом NSObject.
class MyClass : NSObject {
public var intField : Int = 100;
public var doubleField : Double = 10.0;
}
let a = MyClass()
a.setValue(200, forKey: "intField")
a.setValue(20.0, forKey: "doubleField")
print(a.intField) // Output: 200\n
print(a.doubleField) // Output: 20.0\n
Спасибо за ur anwser, но я забыл сказать, является ли dataType необязательным ? Как это сделать? – Shaw
Вы можете взглянуть на этот ответ: http://stackoverflow.com/a/31353182/1755075 Чтобы процитировать этот ответ: «Если вам действительно нужно, чтобы это было необязательным, и если вам действительно нужно использовать KVC на нем, затем объявите его как NSNumber ?, а не Int ?. " – ewcy
Я знаю, использовать NSNumber, но я не хочу, я просто интересно, есть ли какой-либо другой метод для достижения цели, спасибо все равно. – Shaw
Если вы хотите, чтобы отразить все свойства и попытаться использовать KVC SetValue: forKey: и значение: функция, она может быть немного боли, чтобы написать общий метод, чтобы сделать это (например, вы хотите, чтобы кодировать или декодировать JSON в ваш класс). Для этой темы вы можете проверить исходный код ServiceStack.Swift, чтобы узнать, как работает эта замечательная библиотека: https://github.com/ServiceStack/ServiceStack.Swift – bubuxu