【问题标题】:Alamofire request chaining - Cannot call value of non-function type 'HTTPURLResponse'Alamofire 请求链接 - 无法调用非函数类型“HTTPURLResponse”的值
【发布时间】:2018-03-16 10:24:12
【问题描述】:

这里有一个 Swift 新人。我正在尝试弄清楚如何将多个 Alamofire 调用链接在一起。

我需要

  1. 从服务器 1 获取身份验证令牌
  2. 从服务器 1 获取一些数据(需要身份验证令牌)
  3. 从服务器 2 获取身份验证令牌
  4. 根据步骤 2 中的值从服务器 2 获取更多数据。

我已尝试按照这篇文章中的示例进行操作: Chain multiple Alamofire requests

很遗憾,这些示例都不适用于 Swift 4。

我已决定采用选项 2,但继续选择

不能调用非函数类型'HTTPURLResponse?'的值

putRequestgetRequest 行均出错。我不知道这意味着什么或如何解决它。

我当前的代码:

import UIKit
import PromiseKit
import Alamofire
import SwiftyJSON

class ViewController: UIViewController {

    let URL = "http://httpbin.org/"

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func runPutRequest() {

        let putRequest = Alamofire.request("\(URL)/get")

        putRequest.response { [weak self] putRequest, putResponse, putData, putError in
            if let strongSelf = self {
                // Probably store some data
                strongSelf.runGetRequest()
            }
        }
    }

    func runGetRequest() {

        let getRequest = Alamofire.request("\(URL)/get", method: .get)

        getRequest.response { [weak self] getRequest, getResponse, getData, getError in
            if let strongSelf = self {
                // Probably store more data
                strongSelf.processResponse()
            }
        }
    }

    func processResponse() {
        // Process that data
    }

    func reloadData() {
        // Reload that data
    }
}

任何帮助将不胜感激。

【问题讨论】:

    标签: swift alamofire swift4


    【解决方案1】:

    response 闭包返回参数太多,实际上你只需要一个 DataResponse 参数。这段代码对我有用:

    func runPutRequest() {
        let putRequest = Alamofire.request("\(URL)/get", method: .put)
        putRequest.response { [weak self] response in
            if let strongSelf = self {
                // Probably store some data
                strongSelf.runGetRequest()
            }
        }
    }
    
    func runGetRequest() {
        let getRequest = Alamofire.request("\(URL)/get", method: .get)
        getRequest.response { [weak self] response in
            if let strongSelf = self {
                // Probably store more data
                strongSelf.processResponse()
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多