首页 > 解决方案 > 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()
        }
    }

标签: iosswiftnsurlsessionnsurlrequestpromisekit

解决方案


我认为你只是对你的通用论点有点困惑。改变:

    func getData<Data>(method: String, queryItems: [URLQueryItem] = []) -> Promise<Data> {
   

    func getData(method: String, queryItems: [URLQueryItem] = []) -> Promise<Data> {

问题是当你有Data一个泛型类型参数时,编译器认为Data是你将定义的某种类型......但在你也Data用来引用 Swift 库Data类型的函数中,它不能同时是两者同时。


推荐阅读