Das Problem ist am Anfang der Methodendeklaration.
func execute<String, Bool>
Wer hat Ihnen beigebracht, eine generische Methode auf diese Weise zu deklarieren?
Die generischen Parameter sollen in die <>
s gehen, nicht tatsächliche Typen!
Um das Protokoll zu implementieren, benötigen Sie eine generische Methode, keine, die eine String
akzeptiert und Bool
zurückgibt. Der Compiler behandelt String
und Bool
als Namen der generischen Parameter anstelle der tatsächlichen Swift-Typen. Wenn also der Compiler sagt, dass Bool
nicht in Bool
konvertiert werden kann, bedeutet dies, dass der schnelle Bool
-Typ nicht in den generischen Parameter Bool
konvertiert werden kann.
Ich denke, was Sie brauchen, ist zugeordnete Typen.
public protocol Protocol1 {
associatedtype RequestType
associatedtype ResultType
func execute(req: RequestType) -> Promise<ResultType>
}
struct Implemented1 : Protocol1 {
typealias ResultType = Bool
typealias RequestType = String
func execute(req : String) -> Promise<Bool> {
return Promise { fulfill, reject in
fulfill(true)
}
}
}
P.S. dies:
Promise { fulfill, reject in
fulfill(true)
}
kann vereinfacht werden:
Promise(value: true)
Wo ist erscheint der Fehler? Bei dem Versprechen? Wo ist Promise definiert? –
@NateBirkholz Der Fehler kommt zur Erfüllung (wahr). und Promise ist von PromiseKit –
Können Sie die Definition von 'Versprechen zeigen? Nur der Initialisierer sollte in Ordnung sein. – Sweeper