Swift 2.3でAlamofire 3.4を使用していましたが、コードをSwift 3およびAlamofire 4に更新する必要があります。Alamofireのマネージャーを使用してURLでPOSTを実行していました。 SessionManagerに関するドキュメントを読み、リクエストがメソッド.GETを使用することを理解しています。
Manager .Response()を使用してリクエストからコールバックを取得していましたが、現在SessionManagerで変更されています。
SessionManagerを使用してPOSTメソッドを作成するにはどうすればよいですか?そして、どのようにしてリクエストからレスポンスを取得しますか?
これは私の元のコードです:
import UIKit
import AEXML
import Alamofire
class Request: NSObject {
internal typealias RequestCompletion = (statusCode: Int?, error:NSError?) -> ()
private var completionBlock: RequestCompletion!
var serverTrustPolicy: ServerTrustPolicy!
var serverTrustPolicies: [String: ServerTrustPolicy]!
var afManager: Manager!
func buildBdRequest(ip : String, serviceStr : String, completionBlock:RequestCompletion){
let url = getURL(ip, service: serviceStr)
configureAlamoFireSSLPinningWithCertificateData()
makeAlamofireRequest(url)
self.completionBlock = completionBlock
}
func makeAlamofireRequest(url : String){
self.afManager.request(.POST, url)
.validate(statusCode: 200..<300)
.response { request, response, data, error in
print("data - > \n \(data.debugDescription) \n")
print("response - >\n \(response.debugDescription) \n")
print("error - > \n \(error.debugDescription) \n")
var statusCode = 0
if response != nil {
statusCode = (response?.statusCode)!
}
self.completionBlock(statusCode: statusCode, error: error)
}
}
private func getURL(ip : String, service: String) -> String{
return ip + service;
}
func configureAlamoFireSSLPinningWithCertificateData() {
self.serverTrustPolicies = [ :
// "github.com": self.serverTrustPolicy!
]
self.afManager = Manager(
configuration: NSURLSessionConfiguration.defaultSessionConfiguration()
)
}
}
コードをSwift 3とAlamofire 4に移行しました。ここに結果があります。
_internal typealias RequestCompletion = (Int?, Error?) -> ()?
private var completionBlock: RequestCompletion!
var afManager : SessionManager!
func makeAlamofireRequest(url :String){
let configuration = URLSessionConfiguration.default
afManager = Alamofire.SessionManager(configuration: configuration)
afManager.request(url, method: .post).validate().responseJSON {
response in
switch (response.result) {
case .success:
print("data - > \n \(response.data?.debugDescription) \n")
print("response - >\n \(response.response?.debugDescription) \n")
var statusCode = 0
if let unwrappedResponse = response.response {
let statusCode = unwrappedResponse.statusCode
}
self.completionBlock(statusCode, nil)
break
case .failure(let error):
print("error - > \n \(error.localizedDescription) \n")
let statusCode = response.response?.statusCode
self.completionBlock?(statusCode, error)
break
}
}
}
_
コードに関する注意:
Alamofire 4.0では、コード200..300の間で手動で検証する必要はありません。 validate()
メソッドはそれを自動的に行います。
ドキュメント :
200 ... 299の範囲内のステータスコードを自動的に検証し、応答のContent-Typeヘッダーが要求のAcceptヘッダー(提供されている場合)と一致することを確認します。
response
メソッドでresponseJSON
パラメーターを使用できます。コードに必要なすべての情報が含まれています。
request
メソッドについて
open func request(_ url: URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, encoding: ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil) -> DataRequest
URLを除くすべてのパラメーターは、最初はnilであるか、デフォルト値があります。そのため、リクエストにパラメーターまたはヘッダーを追加しても問題ありません。
それがあなたを助けることを願っています