为什么这个函数不能编译?投诉是:二元运算符' ==='不能应用于I.Type和T.Type类型的操作数。
func checkTypeOf<I, T>(instance: I, type: T.Type) {
print("\(instance) \(I.self === type ? "is" : "is not") a \(type)")
}
相比之下,这是一个编译和运行的例子:
class Dog {
@objc static var whatADogSays : String = "woof"
}
class NoisyDog : Dog {
}
func typeTester(d:Dog, _ whattype:Dog.Type) {
print("The \(d.dynamicType) \(d.dynamicType === whattype ? "is" : "is not") a \(whattype)")
}
typeTester(NoisyDog(), Dog.self)
答案 0 :(得分:1)
您可能需要将参数约束为AnyType
,因为===仅适用于AnyObject。
func checkTypeOf<I: AnyObject, T: AnyObject>(instance: I, type: T.Type) {
print("\(instance) \(I.self === type ? "is" : "is not") a \(type)")
}
以下是===
运算符的定义方式
@warn_unused_result
public func ===(lhs: AnyObject?, rhs: AnyObject?) -> Bool