与类类型的swift类型比较

时间:2015-05-05 17:58:22

标签: swift reflection

按照以下方式进行类型比较很容易:

if foo is NSDate { ... }

if let bar = foo as NSDate { ... }

但我没有运气对类类型测试对象的类型。

这是一个展示我尝试过的游乐场:

import UIKit

class DateRowType : NSObject {
    static var dataType : AnyClass {
        get {
            return NSDate.self
        }
    }
}

let date = NSDate()

// never succeeds
if reflect(date).valueType is DateRowType.dataType.Type {
    print ("it's a date!")
}

// prints error 'dataType' is not a member type of 'DateRowType'
if let newDate = date as DateRowType.dataType {
    print("it's a date!")
}


// string comparison failure due to NSDate class cluster
reflect(date).valueType // __NSDate
print(DateRowType.dataType) // NSDate

这样做的正确方法是什么?我从dataType返回了错误的类型吗?

2 个答案:

答案 0 :(得分:0)

对于NSObject的子类,您可以使用isKindOfClass() (如在Objective-C中):

if date.isKindOfClass(DateRowType.dataType) {
    println ("it's a date!")
}

答案 1 :(得分:0)

您可以查看dynamicType:

let date = NSDate()
let str = "AnyString"

if toString(date.dynamicType) == toString(NSDate().dynamicType) {
    print ("it's a date!")
}

if toString(str.dynamicType) == toString("".dynamicType) {
    print ("it's a  string")
}