Обычно удобнее, если API перемещает тип в сигнатуру, чтобы упростить закрытие:
static func requestArray<T>(of: T.Type, completion: @escaping (_ result: Result<[T], Error>) -> ()) { }
Когда это сделано, вызов становится:
MyClass.requestArray(of: String.self) { result in
switch result {
case .success(let array):
break
case .failure(let error):
break
}
}
Этот подход также хорошо работает, когда T
является возвращаемым типом.См. Codeable
для хорошего примера такого подхода в таких методах, как decode(_;from:)
.