#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
}