按照以下方式进行类型比较很容易:
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返回了错误的类型吗?
答案 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")
}