2016-12-29 6 views
0

Как и в случае с темой, существует класс, я хочу установить значения для свойств во время выполнения, , и я установил значения, которые унаследованы от NSObject, использует KVC mechanism and Reflect mechanism, и мне также нужно установить значения для тех, кто имеет 't унаследован от NSObject, например dataType: Int, Double. Как я могу это сделать?Как установить значение для ключа, тип которого является базовым типом данных во время выполнения в swift?

+0

Если вы хотите, чтобы отразить все свойства и попытаться использовать KVC SetValue: forKey: и значение: функция, она может быть немного боли, чтобы написать общий метод, чтобы сделать это (например, вы хотите, чтобы кодировать или декодировать JSON в ваш класс). Для этой темы вы можете проверить исходный код ServiceStack.Swift, чтобы узнать, как работает эта замечательная библиотека: https://github.com/ServiceStack/ServiceStack.Swift – bubuxu

ответ

0

Подпись 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 
+0

Спасибо за ur anwser, но я забыл сказать, является ли dataType необязательным ? Как это сделать? – Shaw

+0

Вы можете взглянуть на этот ответ: http://stackoverflow.com/a/31353182/1755075 Чтобы процитировать этот ответ: «Если вам действительно нужно, чтобы это было необязательным, и если вам действительно нужно использовать KVC на нем, затем объявите его как NSNumber ?, а не Int ?. " – ewcy

+0

Я знаю, использовать NSNumber, но я не хочу, я просто интересно, есть ли какой-либо другой метод для достижения цели, спасибо все равно. – Shaw