2016-04-10 12 views
0

データ(JSON)を返すためにswiftのfuncに問題があります。私はその完了処理を知っているが、誰かが助けてくれるかもしれないので、私は苦労している。アラモファイドのマルチパートアップロードリクエストの完了ハンドラ

以下のコードは私の機能を示しています。 APIはフィールド内の文字列としてjsonを必要とします。リクエスト自体は動作します。>プリント(ポスト)に正しいデータが表示されます。しかし、私はその機能を引き出すことはできません。 (私はAlamofire、SwiftyJSON、swift2.2と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 

} 

答えて

4

だから私はそれを考え出したと思う...

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

そして...

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

      print(response) 

     } 
で結果を取得します

完璧ではありませんが、機能します。