2016-04-19 4 views
5

Ich möchte einen Null-Wert übergeben, d. H. Optional auf einen der Parameterwert. Und es muss mit dem Null-Wert in der Alamofire Post Anfrage fortfahren. Es wäre hilfreich, wenn Sie mir sagen, wie man als nächstes vorgeht?Wie übergebe ich einen Nullwert für einen der Parameter in Alamofire Post Anfrage

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

Die Antwort bekommt sollte, auch wenn die profile_pictures gelang leer. Ich weiß, dass es mit optionaler Verkettung gemacht werden kann, aber nicht weiß, wie es weitergeht !!

Antwort

-1

hoffen, dass diese Ihnen helfen :)

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 '" Schlüssel ": Null wird dies als ein zusätzliches [Schlüssel: Wert] Paar behandelt werden. Was soll es mit dem Wert "profile_picture" machen ?! –

+0

okay, du meinst wenn du base64String leer bist wana pass nil? – Sahil

+0

Ja sollte es, aber es wird beim Entpacken des Werts abgestürzt, weil es ein Nullwert ist. Ich muss eine Erfolgsantwort erhalten, auch wenn der Wert Null ist. Wenn ich Ihren Code versuchte, sagt es ** 'Valye des Typs' Bool 'kann nie Null sein, Vergleich ist nicht erlaubt' ** –

0

Ich denke, Ihre einfachste Antwort "profile_picture" als zweiter Schritt hinzuzufügen wäre.

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

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

es funktioniert man !! Aber wenn ich ein gültiges Bild zuweise, zeigt es das gleiche Ergebnis, dass kein Bild verfügbar ist. –

5

von null oder nicht initialisierten optionalen Parameter Server geben wird Optional erhalten

Sie können NSNull() übergeben diese Zum Wörterbuch

versuchen, wie

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

swiftyjson auch null handhaben als NSNull

auch hier gibt es eine gute Referenz null/nil in swift language

+0

Ich konnte Sie nicht bekommen, könnten Sie Ihr Szenario in meinem Code für ein besseres Verständnis implementieren. –

+0

@PraveenKumar Wenn kein Bild verfügbar ist, muss der Schlüssel mit Nullwert vorhanden sein? – Qamar

+0

Es sagt, kann keinen Wert vom Typ 'NSNull' zu Typ 'String' an dieser Zeile zuweisen 'parms [" Bild "] = NSNull()' –

-1

Nach einer sehr gründlichen Untersuchung fand ich heraus, dass es einfach durch optionale Verkettung und Typ Casting getan werden kann.

Der erste Schritt er die Parameter von Typ zu unterteilen sie Zeichenfolge und Bild und prüfen, ob die Verfügbarkeit von Stringwert und Bildwert Gießen.

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

Machen Sie es wie dies in der Anforderungsmethode

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

Sie müssen die Parameter in zwei, eine für die String-Werte und andere für das Bild nicht geteilt und auch ist es nicht notwendig, Konvertiere das Bild in eine Zeichenkette. Hoffe diese Lösung hilft !!