我有一个功能:
static func requestArray<T>(completion: @escaping (_ result: Result<[T], Error>) -> ()) {
}
这样称呼:
MyClass.requestArray() { result in
switch result {
case .success(let array):
break
case .failure(let error):
break
}
}
但是,这无法正常工作,因为它无法推断出通用类型T。如何更改我的代码,使其能够识别T应该是什么类型? (假设array
的类型应为[String]
)
答案 0 :(得分:1)
如果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:)
以获得该方法的一个很好的例子。
答案 1 :(得分:0)
调用函数时,您已经在完成处理程序中明确声明了result
的类型:
MyClass.requestArray() { (result: Result<[String], Error>) in
switch result {
case .success(let array):
break
case .failure(let error):
break
}
}