swift - Alamofire 3 自定义编码到 Alamofire 4 自定义编码

标签 swift swift3 alamofire

我有使用 customParameterEncoding 在 Alamofire 3 中编写的方法。这种自定义编码只是将 queryString 中的“[]=”替换为“=”并返回它。

Alamofire.request(.GET, SearchURL, parameters: params, encoding: customEncoding, headers: headers).validate().responseJSON {
            response in
            switch response.result {
            case .success:
                print("success")
                break
            case .failure(let error):
                print("Error: " + error.localizedDescription)
                break
            }
        }

和自定义编码参数

let customEncoding =  ParameterEncoding.Custom { requestConvertible, parameters in
    let (mutableRequest, error) = ParameterEncoding.URL.encode(requestConvertible, parameters: parameters)
    mutableRequest.URL = NSURL(string: mutableRequest.URLString.stringByReplacingOccurrencesOfString("%5B%5D=", withString: "="))
    return (mutableRequest, error)
}

如何将customEncoding转为Alamofire 4版本?

最佳答案

只需分离 GET 和 POST 的结构也可以。

http://matsue.github.io/post/how-to-remove-square-brackets-with-alamofire/

Alamofire 4 与 Swift 3

// Remove square brackets for GET request
struct CustomGetEncoding: ParameterEncoding {
    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var request = try URLEncoding().encode(urlRequest, with: parameters)
        request.url = URL(string: request.url!.absoluteString.replacingOccurrences(of: "%5B%5D=", with: "="))
        return request
    }
}

// Remove square brackets for POST request
struct CustomPostEncoding: ParameterEncoding {
    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
        var request = try URLEncoding().encode(urlRequest, with: parameters)
        let httpBody = NSString(data: request.httpBody!, encoding: String.Encoding.utf8.rawValue)!
        request.httpBody = httpBody.replacingOccurrences(of: "%5B%5D=", with: "=").data(using: .utf8)
        return request
    }
}

// Use structs for requests 
Alamofire.request("http://example.com", method: .get, parameters: ["foo": ["bar1", "bar2"]], encoding: CustomGetEncoding())
Alamofire.request("http://example.com", method: .post, parameters: ["foo": ["bar1", "bar2"]], encoding: CustomPostEncoding())

关于swift - Alamofire 3 自定义编码到 Alamofire 4 自定义编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40017640/

相关文章:

ios - 在 IOS 10 swift 3 中未收到 FCM 通知

swift - 如何记录 didReceiveRemoteNotification userInfo? - swift

json - 获取JSON中的所有项目并将它们放入数组中

ios - Alamofire下载数据后的返回值

ios - UIView 中的 childViewController.view.frame 呈现不同的值

ios - 为什么在 Firebase removeValue() 中删除数据不起作用?

ios - 如何从坐标中提取用户的城市

ios - 无法让最简单的 cocoapod 库工作

ios - 关闭 block 不会在第二次 swift3 上重新加载表

swift - 在 Alamofire 5 中执行 SSL 固定?