Закрытие, которое принимает универсальный тип? - PullRequest
0 голосов
/ 18 сентября 2019

Со следующим кодом обработчика завершения, почему он выдает ошибку о типе completionClosure?

enum ModelSerializerError: Error {
    case readjson(String)
    case writejson(String)
    case writeFirebase(String)
    case readFirebase(String)
}

enum ModelSerializerResult<T> {
    case success(T)
    case failure(ModelSerializerError)
}

static func serializeToFirebase<T>(value: T.Type, path: String, completion: @escaping (ModelSerializerResult<Void>) -> Void) where T: Encodable { ... }

// Later in some function...

let handleError : (Error) -> () =
    { error in
        print("Error: \(error)")
    }

let completionClosure : (ModelSerializerResult) -> () =
    { result in // Cannot convert value of type '(_) -> ()' to specified type '(ModelSerializerResult) -> ()'
        switch result {
        case .success(let val): ()
        case .failure(let error): handleError(error)
        }
    }

serializeToFirebase(value: MyClass.self, path: path, completion: completionClosure)

1 Ответ

0 голосов
/ 18 сентября 2019

Это может быть немного сложно, если вы новичок в закрытии синтаксиса.В этом примере мне не хватает универсального.Измените строку:

let completionClosure : (ModelSerializerResult) -> () =

на

let completionClosure : (ModelSerializerResult<Void>) -> () =
...