首页 > 解决方案 > 无法在 APIClient 的当前上下文中推断闭包类型

问题描述

我正在尝试将代码从 Swift 3.2 迁移到 Swift 4.2。放入 Xcode 10.1 时出现此错误。“无法在当前上下文中推断闭包类型”。这是使用 YALAPIClient。请帮忙。

无法在当前上下文中推断闭包类型 这是我在堆栈溢出时发现的。但我在这里没有使用任何尝试方法。请帮助。

private func presentIndustrySearch() {
    let dataProvider = RequestDataProvider { return IndustriesRequest() } /*error comes here*/
}

public class RequestDataProvider<Representation, Request>: DataProvider, NetworkClientInjectable     
where
Request: SerializeableAPIRequest,
Request.Parser.Representation == [Representation]
{
    public typealias Item = Representation
    public typealias RequestConstructor = () -> Request

    public private(set) var data = [Item]()
    private let requestConstructor: RequestConstructor

    public init(_ requestConstructor: @escaping RequestConstructor) {
      self.requestConstructor = requestConstructor
    }

    public func loadData(before: () -> Void, after: @escaping (Error?) -> Void) {
       let request: Request = self.requestConstructor()

       before()

       networkClient.execute(request: request, parser: request.parser, completion: { [weak self] task in
          guard let `self` = self else { return }

          if let data = task.value, data.count != 0 {
            self.data.append(contentsOf: data)
            after(nil)
          } else if let error = task.error {
            after(error as NSError)
          } else {
            let error = NSError.reachedEndOfPage()
            after(error)
        }
       })
    }
}
public protocol SerializeableAPIRequest: APIRequest {

   associatedtype Parser: ResponseParser

   var parser: Parser { get }

}

public struct IndustriesRequest: SerializeableAPIRequest, TokenizedAPIRequest, StubAPIRequest {

    public private(set) var method = APIRequestMethod.get
    public private(set) var path = "industries"
    public private(set) var parser = KeyPathMappableArrayParser<[Industry]>(keyPath: "data")
    public private(set) var parameters: [String: String]? = [:]
    public private(set) var authenticationTokenRequired = true

    public init(value: String = "") {
      parameters!["term"] = value
    }
}

标签: swiftxcodeapiclient

解决方案


推荐阅读