我很难在Swift中使用协议类型进行类型检查。我有几个协议(在OBJ-C框架中定义),我试图检查他们的类型,像这样:Swift协议比较
public func resolve(proto: Protocol!) -> NSObject {
// does not match when called with resolve(Foo)
if (proto is Foo)
{
return FooImpl();
}
// other type checking here
}
我曾尝试:
// Compile error: Expected member name or constructor call after type name
if (proto === Foo)
// Compile error: Expected member name or constructor call after type name
if (proto == Foo)
// Works, but seems hackish as it reverts to string comparison
if (NSStringFromProtocol(proto) == NSStringFromProtocol(Foo))
可以这样不使用NSStringFromProtocol
做些什么呢?
foo是如何定义的?我猜foo是一个类变量,你是否初始化它?或者你有一个init()方法? (不是nscoder之一),并在那里初始化foo? (在init方法中) – Zich
Foo是一个只在objective-c框架中定义的协议。 –