2016-04-19 30 views
5

Vorrei passare un valore nullo, cioè facoltativo a uno dei valori del parametro. E deve procedere con il valore nullo nella richiesta Alamofire Post. Sarebbe utile se mi dica come procedere in seguito?come passare un valore nullo per uno dei parametri in alamofire Richiesta post

let image: UIImage = UIImage() 
    let imageData = UIImagePNGRepresentation(image) 
    let base64String = imageData?.base64EncodedStringWithOptions(.Encoding64CharacterLineLength) 

    let parameters = [ 
     "first_name": "XXXXX", 
     "email" : "[email protected]", 
     "password" : "password", 
     "profile_picture" : base64String] 

Alamofire.request(.POST, "http://abc/public/user/register", parameters: parameters, encoding: .JSON, headers: nil) 

     .progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in 
      print(totalBytesWritten) 

      // This closure is NOT called on the main queue for performance 
      // reasons. To update your ui, dispatch to the main queue. 
      dispatch_async(dispatch_get_main_queue()) { 
       print("Total bytes written on main queue: \(totalBytesWritten)") 
      } 
     } 
     .responseJSON { response in 
      debugPrint(response) 
    } 

La risposta dovrebbe ottiene riuscito anche se i profile_pictures è vuoto. So che può essere fatto con il concatenamento opzionale ma non so come procedere !!

risposta

-1

speranza che questo vi aiuterà :)

var parameters :[String : AnyObject?] = [ 
    "first_name": "XXXXX", 
    "email" : "[email protected]", 
    "password" : "password"] 

if let string = base64String where base64String.isEmpty != false { 
    parameters["profile_picture"] = string 
} 
+0

@ Sahil '" chiave ": nil' questa sarà considerata come una coppia aggiuntiva [Chiave: Valore]. Cosa dovrebbe fare con il valore "profile_picture" ?! –

+0

okay, vuoi dire che quando base64String è vuota tu wana passi nil? – Sahil

+0

Sì, dovrebbe, ma si blocca mentre si estrae il valore, perché è un valore nullo. Devo ottenere una risposta positiva anche se il valore è zero. Quando ho provato il tuo codice, si dice ** 'valye di tipo' Bool 'non può mai essere nullo, il confronto non è consentito' ** –

0

Credo che la vostra risposta più semplice sarebbe quella di aggiungere "profile_picture" in una seconda fase.

var parameters = [ 
    "first_name": "XXXXX", 
    "email" : "[email protected]", 
    "password" : "password"] 

if let base64String = base64String where !base64String.isEmpty { 
    parameters["profile_picture"] = base64String 
} 
+0

funziona uomo !! Ma se assegno un'immagine valida, mostra lo stesso risultato che nessuna immagine è disponibile. –

5

Passando nullo o non inizializzato parametro Server opzionale otterrà opzionale

È possibile passare NSNull() al dizionario

provare questo, come

var params = ["paramA","valueA"] if imageBase64 == nil { parms["image"] = NSNull()} else { params["image"] = imageBase64 } 

swiftyjson anche gestire null come NSNull

anche qui c'è un buon riferimento null/nil in swift language

+0

Non riuscivo a prenderti, potresti implementare il tuo scenario nel mio codice per una migliore comprensione. –

+0

@PraveenKumar Se non è disponibile alcuna immagine, la chiave deve essere lì con valore null? – Qamar

+0

Non è possibile assegnare un valore di tipo 'NSNull' per digitare 'String' in questa riga 'parms [" image "] = NSNull()' –

-1

Dopo una ricerca molto approfondita, ho scoperto che si può fare facilmente attraverso concatenamento opzionale e tipo casting.

Il primo passo per dividere i parametri per tipologia di colata a stringa e immagine e verificare la disponibilità di valore String e valore dell'immagine.

let parameters: [String : AnyObject? ] = [ 
    "first_name": "XXXXX", 
    "email" : "[email protected]", 
    "password" : "password", 
    "profile_pic" : UIImage(named: "logo")] 

fare in questo modo nel metodo di richiesta

for (key, value) in parameters { 

       if let value1 = value as? String { 
        multipartFormData.appendBodyPart(data: value1.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
       } 
       if let value1 = value as? UIImage { 
        let imageData = UIImageJPEGRepresentation(value1, 1) 
         multipartFormData.appendBodyPart(data: imageData!, name: key, fileName: "logo.png" , mimeType: "image/png") 
        } 

Lei non devono dividere i parametri in due, uno per i valori di stringa e altri per l'immagine e anche senza che sia necessario converti l'immagine in stringa. Spero che questa soluzione aiuti !!