2016-04-10 21 views
0

Ich habe ein Problem mit meiner Funktion in Swift, um die Daten (JSON) zurück zu bekommen. Ich weiß, es ist die Fertigstellung, aber ich kämpfe, vielleicht kann jemand helfen.Abschluss Handler bei Alamofire mehrteilige Upload-Anfrage

Der folgende Code zeigt meine Funktion. Die API benötigt den JSON als Zeichenfolge in einem Feld. Die Anfrage selbst funktioniert> der Druck (Post) zeigt die korrekten Daten an. Aber ich verstehe diese Funktion nicht. (ich benutze Alamofire, SwiftyJSON, swift2.2 und Xcode 7,3)

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 

} 

Antwort

4

Also ich denke, es herausgefunden ...

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 
         } 
     } 
    ) 
} 

Und das Ergebnis erhalten mit ...

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

      print(response) 

     } 

Nicht perfekt, aber es funktioniert.