2016-12-29 75 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

相关问题