2016-12-29 70 views
0

就像主題說的那樣,有一個類,我想爲運行時的屬性設置值, 並且我已經設置了從NSObject繼承的值使用KVC mechanism and Reflect mechanism,並且我還需要爲那些避難所設置值從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

感謝您的安努維爾,但我忘了說,如果dataType是可選的?如何做到這一點? – Shaw

+0

你可以看看這個答案:http://stackoverflow.com/a/31353182/1755075 引用這個答案,「如果你真的需要這是一個可選的,如果你真的需要使用KVC在它上面,然後聲明它爲NSNumber?,而不是Int ?.「 – ewcy

+0

我知道使用NSNumber,但我不想,我只是想知道是否有任何其他方法來實現目標,謝謝你都一樣。 – Shaw

相關問題