Ошибка компиляции при использовании singleton с generics и completionHandler

#swift #generics

#swift #generics

Вопрос:

У меня есть следующий общий тип:

 public enum APIResult<T> {
    case success(T)
    case failure(NetworkError)
    
    public var value: T? {
        if case let .success(value) = self {
            return value
        }
        return nil
    }
    
    public var error: NetworkError? {
        if case let .failure(error) = self {
            return error
        }
        return nil
    }
}
 

И у меня есть следующий вызов, который я определяю внутри синглтона:

 public func getGenericData<T>(urlEndPoint:String,completionHandler:@escaping(APIResult<T>)->()) {}
 

Я вызываю его, используя следующий код:

 APIManager.shared.getGenericData(urlEndPoint: "getuserprofile") { (result:Any) in
            
}
 

но swift отказывается от этого, говоря:

Не удалось определить общий параметр ‘T’.

В чем будет моя проблема?

Комментарии:

1. это не связано с проблемой, но вы могли бы рассмотреть возможность использования Swifts, встроенного в тип результата, вместо объявления вашего собственного.

Ответ №1:

Вам нужно сообщить компилятору, какой результат APIResult ожидать, например

 getGenericData(urlEndPoint: "getuserprofile") { (result:APIResult<String>) in

}