swift5 - 泛型类型“结果”专用于太少的类型参数(得到 1,但预期为 2)
问题描述
我只是想在我的项目中包含 Result 并且遇到了一些问题。在我看来,Alamofire(已经是一个依赖项)在尝试编写返回结果的函数时定义了自己的 Result 类型抛出问题。
例如 Xcode (10.2 beta 4) 告诉我我不能写 Result-> Response = (_ result: Result) -> Void 因为通用类型“结果”专门使用了太少的类型参数(得到 1,但预期为 2) .
两者都链接为通过 Cocoapods 在“Swift 5.0 beta”项目中安装的框架。
我猜这样的问题实际上不应该发生,但我在这里做错了。任何指针都会很棒,谢谢!
import Foundation
import Alamofire
typealias Response<T> = (_ result: Result<T>) -> Void //error here
class APIClient {
private static let baseUrl: URL = URL(string: "https://api.flickr.com/services/rest/")!
private static let key: String = "8e15e775f3c4e465131008d1a8bcd616"
private static let parameters: Parameters = [
"api_key": key,
"format": "json",
"nojsoncallback": 1
]
static let shared: APIClient = APIClient()
let imageCache = NSCache<NSString, UIImage>()
@discardableResult
private static func request<T: Decodable>(path: String? = nil,
method: HTTPMethod,
parameters: Parameters?,
decoder: JSONDecoder = JSONDecoder(),
completion: @escaping (Result<T>) -> Void) -> DataRequest {
let parameters = parameters?.merging(APIClient.parameters, uniquingKeysWith: { (a, _) in a })
return AF.request(try! encode(path: path, method: method, parameters: parameters))
.responseDecodable (decoder: decoder) { (response: DataResponse<T>) in completion(response.result) }
}
解决方案
您可以限定对 Result 的引用,以便选择您想要的。只有一个参数的版本属于 Alamofire。带有两个参数的那个属于 Swift。
typealias Response<T> = (_ result: Alamofire.Result<T>) -> Void
... or ...
static func upload(
data: Data,
completion: @escaping (Swift.Result<Int, Error>) -> Void
)
推荐阅读
- django - 初始化 Django 模型表单集附加表单字段
- python - 奇怪的pymc3错误
- python - 将 super 与 django ModelForm 类结合使用来更改 __init__ 方法
- deep-learning - 自定义应用程序中的 DeepStream python 应用程序
- javascript - JSON 数据 - 如果值高于 0%,则颜色为绿色
- java - AudioSystem.getAudioInputStream(fileIn); 无权访问该文件并抛出 java.io.FileNotFoundException
- python-3.x - 如何在python中每天清除日志文件?
- vba - 如何使用 Word 文本框值更新 Outlook 的收件人?
- java - 如何使用 Cognito 通过 android 更新用户池属性?
- python-3.x - 从 Pandas 的列名中拆分和替换特殊字符