新版的Swift闭包做参数默认是@noescaping,不再是@escaping。所以如果函数里异步执行该闭包,要添加@escaping。否则报错:
. Parameter '***' is implicitly non-escaping
Escaping closure captures non-escaping parameter '***'
Closure use of non-escaping parameter 'xxx' may allow it to escape.
NetworkTools.requestData(type: .get, URL: "https://httpbin.org/get", parameter: ["name": "matsonga"]) { result, error in
print("result________: \(result)")
print("error________: \(error)")
}
NetworkTools.requestData(type: .post, URL: "https://httpbin.org/post", parameter: ["name": "matsonga"]) { result, error in
print("result________: \(result)")
print("error________: \(error)")
}
import Alamofire
import UIKit
enum MethodType {
case get
case post
}
class NetworkTools {
/// 网络请求封装
/// - Parameters:
/// - type: 类型 GET POST
/// - URL: 网址
/// - parameter: 参数
/// - finishCallback: 回调
class func requestData(type: MethodType,
URL: String,
parameter: [String: NSString]! = nil,
finishCallback: @escaping (_ result: Any, _ error:Any) -> Void)
{
let method = type == .get ? (HTTPMethod.get) : (HTTPMethod.post)
Alamofire.request(URL, method: method, parameters: parameter, encoding: URLEncoding.default, headers: nil).responseJSON { response in
guard let result = response.result.value else { return }
let error = response.result.error
finishCallback(result , error ?? "no error")
}
}
}
/*
您需要像下面一样Swift发送请求
let urlString = "https://httpbin.org/get"
Alamofire.request(urlString, method: .post, parameters: ["foo": "bar"],encoding: JSONEncoding.default, headers: nil).responseJSON { response in
// if let json = response.result.value {
// print("JSON序列化的数据: \(json)")
// }
//
// if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
// print("经过UTF-8编码的数据: \(utf8Text)")
// }
switch response.result {
case .success:
print(response)
break
case .failure(let error):
print(error)
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
带Alamofire 5的Swift 5:
AF.request(URL.init(string: url)!, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
print(response.result)
switch response.result {
case .success(_):
if let json = response.value
{
successHandler((json as! [String:AnyObject]))
}
break
case .failure(let error):
failureHandler([error as Error])
break
}
}
*/