2016-05-23 22 views
5

voglio aggiungere Int valore al multipartFormData:Come aggiungere valore Int per l'upload Alamofire Parametri

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

Ma l'errore di ritorno del server che io non mando Int valore. Come aggiungo il valore Int ai parametri?

+0

si ha la possibilità di digitare cast int a stringa. –

+0

Il tuo server si aspetta davvero un plinary binario 'NSKeyedArchiver'!?? La maggior parte delle volte, il server si aspetta solo una rappresentazione in formato stringa del valore numerico. – Rob

+0

@Rob Ho provato a convertire senza NSKeyedArchiver Ho usato let data = NSData (byte: & vInt, lunghezza: sizeof (Int)) multipartFormData.appendBodyPart (dati: data, nome: chiave) E questo non aiuta –

risposta

12

Il NSKeyedArchiver è molto curioso. Di solito si era appena inviare rappresentazione di stringa, per esempio:

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

Oppure, ancora più semplice, perché stringa di interpolazione funziona sia con String e Int:

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

Oppure, in Alamofire 4 con Swift 3:

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

Grazie, ma ho una domanda e se il valore potrebbe essere '[String]', '[String: Any]' ... se potesse avere molti tipi, quindi dovrei per ogni tipo creare il blocco is? – Chlebta

+1

Oppure potresti avere questo singolo metodo che accetta accetta entrambe le permutazioni, ad esempio un parametro 'Any?' E poi fa 'if let parameters = parameters come? [String] {...} else se let parametri = parametri come? [String: String] {...} ', o qualsiasi altra cosa. – Rob

Problemi correlati