ios - PromiseKit 无法使用“(数据)”类型的参数列表调用“完成”
问题描述
我正在尝试在下面的代码中使用 PromiseKit 从网络请求中获取数据,但在行中seal.fulfill(data)
我收到错误“无法使用类型为“(数据)”的参数列表调用“完成”。谁能给我一个提示我做错了什么?
import Foundation
import PromiseKit
class NetworkService {
let baseHost: String = "api.someAwesomeSite.com"
var version: String { return "3.345" }
let configuration = URLSessionConfiguration.default
func getData<Data>(method: String, queryItems: [URLQueryItem] = []) -> Promise<Data> {
var urlConstructor = URLComponents()
urlConstructor.scheme = "https"
urlConstructor.host = self.baseHost
urlConstructor.path = "/method/\(method)"
urlConstructor.queryItems = [
URLQueryItem(name: "user_id", value: ApiManager.session.userId),
URLQueryItem(name: "access_token", value: ApiManager.session.token),
URLQueryItem(name: "v", value: version),
]
urlConstructor.queryItems?.append(contentsOf: queryItems)
let request = URLRequest(url: urlConstructor.url!)
let session = URLSession(configuration: configuration)
return Promise<Data> { seal in
let task = session.dataTask(with: request) { (data, response, apiError) in
if let error = apiError {
seal.reject(error)
}
if let data = data {
seal.fulfill(data)
}
}
task.resume()
}
}
解决方案
我认为你只是对你的通用论点有点困惑。改变:
func getData<Data>(method: String, queryItems: [URLQueryItem] = []) -> Promise<Data> {
至
func getData(method: String, queryItems: [URLQueryItem] = []) -> Promise<Data> {
问题是当你有Data
一个泛型类型参数时,编译器认为Data
是你将定义的某种类型......但在你也Data
用来引用 Swift 库Data
类型的函数中,它不能同时是两者同时。
推荐阅读
- python - 尝试抓取任何地方或餐厅的谷歌首页地址但不走运
- wpf - 根据屏幕分辨率自动调整 Windows 应用程序屏幕大小
- c# - 为什么我的 do-while 循环中的 continue 关键字不起作用?
- spring - 将缺少的 URI 变量映射到请求映射
- python - 哪个是再训练 YOLO 神经网络的可取策略?
- python-3.x - django.core.exceptions.ImproperlyConfigured:应用程序标签不是唯一的,重复:帐户
- maven - 如何在构建期间要求 IntelliJ 强制下载 maven 依赖项?
- azure - 无法在 SSDT Visual Studio 2017 中导入 SSIS 包
- redis - Redis 集群在主从之间执行频繁故障转移
- python - FFmpeg 安装需要在 Mac 上卸载 python