【问题标题】:Where is the actual API call within this RxAlamofire source code?这个 RxAlamofire 源代码中的实际 API 调用在哪里?
【发布时间】:2019-10-08 21:44:30
【问题描述】:

我试图找出 API 调用中的数据来自何处。具体来说,我想知道req.user 来自哪里,因为我知道没有参数被传递到 API 调用中。

这是服务器端代码(在 JS 中):

let APIHandler = (req, res) = > {
    if (req.user) {
       latitude = req.user.location.latitude
       longitude = req.user.location.longitude
    }
}

这是客户端代码(在 Swift 中):

 let strURLTo = SERVICE.BASE_URL + apiName + limit
 let headers = AuthorizationHeader.getAuthHeader(staticToken: false)

 var urlComponents = URLComponents(string: strURLTo)
 urlComponents?.queryItems = [URLQueryItem(name: "offset", value: String(offset)),
                             URLQueryItem(name: "limit", value: String(limit))]

 let strURL  = urlComponents?.url

 RxAlamofire.requestJSON(.get,strURL!,parameters:[:],headers:headers) 

            .debug()

            .subscribe(onNext: {(HeaderResponse, bodyResponse) in

                if let dict = bodyResponse as? [String: AnyObject] {
                    if let respDict: [String: Any] = JSON(dict).dictionaryObject {
                        let response = ResponseModel.init(statusCode: HeaderResponse.statusCode, response:respDict)
                        self.subject_response.onNext(response)
                    }
                }

            }, onError: { (error) in
                self.subject_response.onError(error)
            })

            .disposed(by: disposeBag)

最后是RxAlamofire.requestJson 的定义:

public func requestJSON(_ method: Alamofire.HTTPMethod,
    _ url: URLConvertible,
    parameters: [String: Any]? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: [String: String]? = nil)
    -> Observable<(HTTPURLResponse, Any)>
{
    return SessionManager.default.rx.responseJSON(
        method,
        url,
        parameters: parameters,
        encoding: encoding,
        headers: headers
    )
}

我尝试的是逐步跟踪 RxAlamofire.requestJSON 函数,但我没有看到实际 API 调用发生的任何地方(对我来说,它似乎只是概述了它期望/返回的类型)。此外,RxAlamofire.requestJSON(.get,strURL!,parameters:[:],headers:headers) 中没有参数 打电话。

【问题讨论】:

    标签: swift rxalamofire


    【解决方案1】:

    实际调用是在这一行中进行的(为了清楚起见,它已经分布在多行中):

    return SessionManager.default.rx.responseJSON(
        method,
        url,
        parameters: parameters,
        encoding: encoding,
        headers: headers
        )
    

    这里正在设置参数:

    var urlComponents = URLComponents(string: strURLTo)
    urlComponents?.queryItems = [URLQueryItem(name: "offset", value: String(offset)),
                                 URLQueryItem(name: "limit", value: String(limit))]
    

    但是,我也没有看到 user 被设置,所以它可能发生在这个答案顶部的 API 函数中?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2011-09-24
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多