У меня возникли трудности с проверкой типа с типом протокола в Swift. У меня есть несколько протоколов (определенные в Obj-C рамки), и я пытаюсь, чтобы проверить их тип как так:Сравнение Swift Protocol
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 - это протокол, определенный только в объектно-c-структуре. –