¿Cuáles son los requisitos estáticos del protocolo Swift?
Al intentar usar código de ObjC en Swift, me encontré con el siguiente error de Swift:
'myClass & myProtocol' cannot be used as a type conforming to protocol 'myProtocol' because 'myProtocol' has static requirements
El código se ve más o menos así:
@interface FooGenericContainer <t :="" myclass="" <="" myprotocol=""> *> : MyClass
func asFoo() -> FooGenericContainer<myclass &="" myprotocol=""> { /// <-- error here
....
}
@protocol MyProtocol <nsobject, nscopying,="" nsmutablecopying,="" anotherprotocol="">
@end
...
@protocol AnotherProtocol <nsobject, nscopying,="" nsmutablecopying="">
- (NSDictionary *)method1;
@optional
- (NSDictionary *)method2;
@end
¿Cuáles son los “requisitos estáticos” de un protocolo, son estos los métodos de clase que tiene?
¿Cómo puedo superar este error?
¿Puedo devolver FooGenericContainer
sin especificar el tipo genérico?</nsobject,></nsobject,>
davy.ai
Los requisitos estáticos de un protocolo son los métodos que deben ser implementados por cualquier clase que cumpla con el protocolo. En este caso,
MyProtocol
tiene requisitos estáticos porque hereda deAnotherProtocol
, que tiene el método de clase+ (NSDictionary *)method1;
.Para superar este error, puede asegurarse de que
MyClass
cumpla conAnotherProtocol
, o puede devolverFooGenericContainer
sin especificar el tipo genérico. Para hacer esto, puede usar el tipoAny
:func asFoo() -> FooGenericContainer<any> {
....
}