编译器不会让我比较类型

时间:2016-04-05 12:41:07

标签: swift

为什么这个函数不能编译?投诉是:二元运算符' ==='不能应用于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)

1 个答案:

答案 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