我想在运行时使用反射来检查给定对象的属性类型。
我使用此代码:
//: Playground - noun: a place where people can play
import UIKit
class Object: NSObject
{
var type:Int?
var name="Apple"
var delicious=true
}
let object = Object()
// now check the "type" property
println(reflect(object)[1].1.value) // this gives me nil
println(reflect(object)[1].1.valueType) // this gives Swift.Optional<Swift.Int>
// check for Optional... works fine - Says "Optional"
if reflect(object)[1].1.disposition == MirrorDisposition.Optional {
println("Optional")
}
// check for type... does not work, because type is an optional - says: not Int
if reflect(object)[1].1.valueType is Int.Type {
println("Int")
} else {
println("no Int")
}
正如您在此代码中看到的那样,我无法检查“valueType”,因为它是一个可选项。
但是如何检查这个“可选”属性的类型?
谢谢, Urkman
答案 0 :(得分:4)
请注意,可选的Int是与Int不同的类型,因此您必须使用Int?.Type
进行检查if reflect(object)[1].1.valueType is Int?.Type {
println("Int Optional")
}