Swift 快速反射类型检查

Swift 快速反射类型检查,swift,reflection,types,dynamictype,Swift,Reflection,Types,Dynamictype,我目前正在尝试快速反射和订阅。在我的类中,我有以下函数来检查给定的键/变量是否存在: func getMirror(key: String) -> MirrorType? { let mirror = reflect(self) for i in 0..<mirror.count { let (name,type) = mirror[i] if name == key { return type } } return n

我目前正在尝试快速反射和订阅。在我的类中,我有以下函数来检查给定的键/变量是否存在:

func getMirror(key: String) -> MirrorType? {
    let mirror = reflect(self)
    for i in 0..<mirror.count {
        let (name,type) = mirror[i]
        if name == key { return type }
    }
    return nil 
}
现在的问题是,是否有可能检查是否可以通过

self.setValue(newValue, forKey: key)
如果该值不可设置,则返回异常。如果a有Swift.Int或Swift.Double变量

println(type)

给了我这些类型的名称。但是有没有一种方法可以探测这些类型的新值转换?我不能直接比较字符串,因为

newValue.dynamicType
返回Swift.Optional或uu NSCFNumber(例如,如果未包装)。我试过使用NSClassFromString,但它似乎不适用于Swift本机类型。有办法做到这一点吗

谢谢

编辑:

另外还有一件事:我还尝试了以下方法

if let convertedValue: AnyObject = mirror.value as? AnyObject {
    var type = convertedValue.dynamicType
}
然后我就可以用

newValue!.isKindOfClass(type)

但是,如果类中有一个尚未实例化的可选项,则这不起作用,因为mirror.value为nil。此外,newValue可能仍然可以转换为所需的类型

如果您想正确地执行此操作并支持任何类型,那么您需要相当多的代码。下面是一些如何从mirror.value中获取正确值的代码。谢谢你的链接,我已经看过这个项目了,但即使他们尝试转换很多不同的值,而不是动态转换到MirrorType对象返回的类型。。。也许我会想出办法,我会把它贴在这里,以防我得到什么!如果你知道怎么做的话,我很感兴趣。我几乎可以肯定没有其他方法可以做到这一点。EVReflection是我的库:-)之所以需要它,是因为mirror.value是Any类型。.setValue的类型必须为AnyObject。像Uint16和Uint32这样的数字属于任意类型。它们需要转换为NSNumber。问题是在调用.setValue函数之前,是否有方法捕获该函数的潜在错误?如果用错误的值调用这个函数,我会得到一个异常,我想知道这个函数是否会失败。如果你想做得正确并且支持任何类型,那么你需要一些代码。下面是一些如何从mirror.value中获取正确值的代码。谢谢你的链接,我已经看过这个项目了,但即使他们尝试转换很多不同的值,而不是动态转换到MirrorType对象返回的类型。。。也许我会想出办法,我会把它贴在这里,以防我得到什么!如果你知道怎么做的话,我很感兴趣。我几乎可以肯定没有其他方法可以做到这一点。EVReflection是我的库:-)之所以需要它,是因为mirror.value是Any类型。.setValue的类型必须为AnyObject。像Uint16和Uint32这样的数字属于任意类型。它们需要转换为NSNumber。问题是在调用.setValue函数之前,是否有方法捕获该函数的潜在错误?如果用错误的值调用这个函数,我会得到一个异常,我想知道这个函数是否会失败。
if let convertedValue: AnyObject = mirror.value as? AnyObject {
    var type = convertedValue.dynamicType
}
newValue!.isKindOfClass(type)