es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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,>

Tags:  ,

Answer

  1. Avatar for 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 de AnotherProtocol, que tiene el método de clase + (NSDictionary *)method1;.

    Para superar este error, puede asegurarse de que MyClass cumpla con AnotherProtocol, o puede devolver FooGenericContainer sin especificar el tipo genérico. Para hacer esto, puede usar el tipo Any:

    func asFoo() -> FooGenericContainer<any> {
    ....
    }

Comments are closed.