2016-05-23 10 views
5

AlamofireアップロードパラメータにのInt値を追加します。どのように私は<code>multipartFormData</code>に<code>Int</code>値を追加したい

Alamofire.upload(.POST, 
       url, 
       headers: headers, 
       multipartFormData: { multipartFormData in 
        //add some jpg image 
        //add other vaues: 
        for (key, value) in parameters { 
         if value is String { 
          multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
         } else if value is Int { 
          let convertedValueNumber: NSNumber = NSNumber(int: value.intValue) 
          let data = NSKeyedArchiver.archivedDataWithRootObject(convertedValueNumber) 
          multipartFormData.appendBodyPart(data: data, name: key) 
         } 
        } 

    }, encodingCompletion: { encodingResult in 
     //some processing 
}) 

しかし、私はInt値を送信しないサーバーリターンエラー。パラメータにIntの値を追加するにはどうすればよいですか?

+0

文字列にcast intを入力するオプションがあります。 –

+0

あなたのサーバは本当に 'NSKeyedArchiver'バイナリplistを期待していますか?ほとんどの場合、サーバーは数値の文字列表現を期待しているだけです。 – Rob

+0

@Rob NSKeyedArchiverなしで変換しようとしましたが、私はデータを使用して= NSData(バイト:&vInt、長さ:sizeof(int))multipartFormData.appendBodyPart(データ:データ、名前:キー)そしてこれは助けになりません –

答えて

12

NSKeyedArchiverは非常に興味があります。通常、あなただけ例えば、文字列表現を送信したい:

Alamofire.upload(.POST, URL, headers: headers, multipartFormData: { multipartFormData in 
    //add some jpg image 
    //add other values: 
    for (key, value) in parameters { 
     if value is String { 
      multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     } else if value is Int { 
      multipartFormData.appendBodyPart(data: "\(value)".dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     } 
    } 
}, encodingCompletion: { encodingResult in 
    //some processing 
}) 

あるいは、さらに簡単に、文字列の補間はStringIntの両方で動作するので:

Alamofire.upload(.POST, URL, headers: headers, multipartFormData: { multipartFormData in 
    //add some jpg image 
    //add other values: 
    for (key, value) in parameters { 
     if value is String || value is Int { 
      multipartFormData.appendBodyPart(data: "\(value)".dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
     } 
    } 
}, encodingCompletion: { encodingResult in 
    //some processing 
}) 

あるいは、スウィフト3とAlamofire 4:

Alamofire.upload(multipartFormData: { multipartFormData in 
    //add some jpg image 
    //add other values: 
    for (key, value) in parameters { 
     if value is String || value is Int { 
      multipartFormData.append("\(value)".data(using: .utf8)!, withName: key) 
     } 
    } 
}, to: url, method: .post, headers: headers, encodingCompletion: { encodingResult in 
    //some processing 
}) 
+0

ありがとうございますが、値が '[String]'、 '[String:Any]' ...の場合はどうすればいいですか? – Chlebta

+1

あるいは、両方の順列を受け入れるというこの単一のメソッドを持つことができます。たとえば、 'Any?'パラメータのようにして、 'let let parameters = parameters as? [String] {...} else if parameters =パラメータは? [文字列:文字列] {...} '、など。 – Rob

関連する問題