2016-09-19 26 views
9

Ben Swift 3 ve Alamofire ben özel Kodlama kullanıyordum 4. projemi güncellenen, ancak diğer kodlama yöntemlerine değişti. Bunun eşdeğer/alternatif bulmak mümkün değilim:Alamofire 4 Swift 3 ParameterEncoding Custom

alamoFire.request(urlString, method: HTTPMethod.post, parameters: [:], encoding: .Custom({ 
     (convertible, params) in 

     let mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest 
     let data = (body as NSString).data(using: String.Encoding.utf8) 
     mutableRequest.httpBody = data 
     return (mutableRequest, nil) 

    }), headers: headers()).responseJSON { (responseObject) -> Void in 

     switch responseObject.result { 
     case .success(let JSON): 
      success(responseObject: JSON) 

     case .failure(let error): 
      failure(error: responseObject) 
     } 
    } 

Ben de URLRequest nesnesi ve basit isteği yaparak çalıştı onun da bazı yönde bana gelin mı bana hataları

var request = URLRequest(url: URL(string: urlString)!) 
    let data = (body as NSString).data(using: String.Encoding.utf8.rawValue) 
    request.httpBody = data 
    request.httpMethod = "POST" 
    request.allHTTPHeaderFields = headers() 

    alamoFire.request(request).responseJSON { (responseObject) -> Void in 

     switch responseObject.result { 
     case .success(let JSON): 
      success(JSON) 

     case .failure(let error): 
      failure(responseObject, error) 
     } 
    } 

vererek nasıl Eğer ParameterEncoding protokol kullanması gerekir Alamofire 4.0'da Alamofire 4

+0

Vücudunuzdaki nedir? Bir String olarak dönüştürdüğünden emin misin? Ve nasıl göndermek istiyorsun? JSON olarak mı? ya da sadece bir dize olarak? –

+0

@AlvinVarghese Ham veri –

cevap

11

ile httpbody takmak için. İşte, herhangi bir StringUTF8 kodlamasını yapan bir örnek.

extension String: ParameterEncoding { 

    public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { 
     var request = try urlRequest.asURLRequest() 
     request.httpBody = data(using: .utf8, allowLossyConversion: false) 
     return request 
    } 

} 

Alamofire.request("http://mywebsite.com/post-request", method: .post, parameters: [:], encoding: "myBody", headers: [:]) 
+0

nasıl yapılır: "myBody" bu örnekte başka herhangi bir kodla ilgilidir? Bu cevap tamamlanmamış kabul edildi. – CptEric

+0

"myBody", isteğinizin gövdesini temsil eden yalnızca bir örnek dizedir. Varsayılan olarak 'String'' 'coding' parametresi olarak kullanamazsınız, ancak benim örneğimde' extension' yardımı ile yapabilirsiniz. – Silmaril

+0

İlginç. String'in sınıfını genişletmekten daha mantıklı bir yol sunmanın daha zarif bir yolu olmalı, hızlı yanıtınız için teşekkürler. – CptEric

8

Bu yöntemi deneyin?

Alamofire.request(url, method: HTTPMethod.post, parameters: parameters, encoding: URLEncoding.httpBody, headers: nil).responseObject(completionHandler: { (response : DataResponse<T>) in 

}) 
+0

Bu 'ParameterEncoding' özel uygulaması gerektirmeyen kabul edilen yanıt olmalıdır. – mosn