ho un protocollo che ho definito in questo modo:Swift: verifica se il tipo generico conforme al protocollo
protocol MyProtocol {
...
}
devo anche una struttura generica:
struct MyStruct <T> {
...
}
Infine ho una funzione generica:
func myFunc <T> (s: MyStruct<T>) -> T? {
...
}
Mi piacerebbe testare all'interno della funzione se il tipo T è conforme a MyProtocol. In sostanza mi piacerebbe essere in grado di fare (~ pseudocodice):
let conforms = T.self is MyProtocol
Ma questo getta un errore di compilazione:
error: cannot downcast from 'T.Type' to [email protected] protocol type 'MyProtocol'
let conforms = T.self is MyProtocol
~~~~~~^~~~~~~~~~~
Ho anche provato varianti, come T.self is MyProtocol.self
, T is MyProtocol
, e l'utilizzo di ==
invece di is
. Finora non ho ottenuto da nessuna parte. Qualche idea?
Anche con questo, ho ancora ottenere lo stesso errore. '@objc protocollo MyProtocol {} struct MyStruct {} func myFunc (s: MyStruct ) -> T? { let conforms = T.self is MyProtocol } ' –
Alex
@Alex, è necessario creare un'istanza di tipo T prima di poter verificare la conformità del protocollo (come so) Se è necessario, digitare T deve essere solo di tipo conforme a MyProtocol, è possibile specificarlo: 'func myFunc (...) -> T?' –
rabbitinspace