2016-04-10 25 views
0

Verilerimi (JSON) geri almak için hızlı bir şekilde func ile ilgili bir sorunum var. Tamamlanma sürecini biliyorum ama mücadele ediyorum, belki birisi yardım edebilir.tamamlama işleyicisi alamofire multipart yükleme isteği

Aşağıdaki kod işlevimi gösterir. API, jsonu bir alanda dize olarak ister. İsteğin kendisi çalışır> yazdırma (posta) doğru verileri gösterir. Ama ben onu bu işlevden anlamam.

class func searchCities(jsonStr: String) -> JSON { 

    let oEndpoint = "https://api.domain.com/api/1.0/" 
    guard let url = NSURL(string: oEndpoint) else { 
     print("error url") 
     return nil 
    } 

    // let parameters : [String: String] = ["one":"some param", "two":"some other param"] 
    var result: JSON = JSON("") 

    Alamofire.upload(.POST, 
        url, 
        multipartFormData: { multipartFormData in 
         multipartFormData.appendBodyPart(data: jsonStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"data") 
         // parameters if needed 
         // multipartFormData.appendBodyPart(data: value, name: key) 
        }, 
        encodingCompletion: { encodingResult in 
         switch encodingResult { 
         case .Success(let upload, _, _): 
          upload.responseJSON{ response in 
           guard response.result.error == nil else { 
            print("error response") 
            print(response.result.error!) 
            return 
           } 
           if let value: AnyObject = response.result.value{ 
            let post = JSON(value) 
            print(post) 
            result = JSON(value)         } 
          } 
         case .Failure(_): 
          print("failure") 
          break 
         } 
     } 
    ) 

    //print("res: \(result)") 
    return result 

} 

cevap

4

yüzden bunu anladım düşünüyorum ...

class func searchFeeds(jsonStr: String, completion: (response: JSON) -> Void) { 

    let oEndpoint = "https://api.domain.com/api/1.0/" 
    guard let url = NSURL(string: oEndpoint) else { 
     print("error url") 
     completion(response: nil) 
     return 
    } 

    Alamofire.upload(.POST, 
        url, 
        multipartFormData: { multipartFormData in 
         multipartFormData.appendBodyPart(data: jsonStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"data") 
         // parameters if needed 
         // multipartFormData.appendBodyPart(data: value, name: key) 
        }, 
        encodingCompletion: { encodingResult in 
         switch encodingResult { 
         case .Success(let upload, _, _): 
          upload.responseJSON{ response in 
           guard response.result.error == nil else { 
            print("error response") 
            print(response.result.error!) 
            completion(response: nil) 
            return 
           } 
           if let value: AnyObject = response.result.value{ 
            completion(response: JSON(value)) 
           } 
          } 
         case .Failure(_): 
          print("failure") 
          break 
         } 
     } 
    ) 
} 

(I Alamofire, SwiftyJSON, swift2.2 ve xcode 7.3 kullanın) Ve ile sonuca ... almak

APIclass.searchFeeds(jsonString) { 
     (response: JSON) in 

      print(response) 

     } 

Mükemmel değil ama işe yarıyor.

İlgili konular