2016-08-01 34 views
1

ich meine Klasse Benutzer mit dem Objekt-Mapper Karte:Kann Wert des Typs 'String?' Nicht konvertieren (Alamofire)

class User: Mappable{ 

private var _username: String! = nil 
private var _password: String! = nil 
private var _firstName: String! = nil 
private var _lastName: String! = nil 

//here are getters and setters(it takes too much space) 

init(){ 

} 

required init?(_ map: Map) { 

} 

func mapping(map: Map) { 

    username <- map["USERNAME"] 
    password <- map["PASSWORD"] 
    firstName <- map["FIRST_NAME"] 
    lastName <- map["LAST_NAME"] 

    } 
} 

Und dann habe ich versucht, neue Benutzer zu machen und einige Werte setzen, Karte das gesamte Objekt und senden mit Alamofire wie folgt aus:

let userEmail = userEmailField.text! 
let userPassword = userPasswordField.text! 

let user = User() 
user.username = userEmail 
user.password = userPassword 
let JSONString = Mapper().toJSONString(user, prettyPrint: true) 

AlamofireService.alamofireService.makePostServiceRequest(URL_BASE, parameters: JSONString, resposeCallback: self) 

Ich folgte den Anweisungen von Bibliotheken, aber ich bekomme den Fehler "Kann Wert des Typs 'String?' zum erwarteten Argumenttyp '[String: AnyObject]' ", warum?

+0

Was ist der Fehler, den Sie erhalten? –

+0

@MatanLachmish sorry ich habe vergessen zu schreiben. Ich bearbeite meine Frage. –

+0

Was ist der Sinn der Verwendung privater Instanzvariablen mit Gettern und Setter? Das ist schnell! Und was ist der Sinn von implizit ausgepackten Optionen in einer Init-Methode? Entweder können die Werte "nil" sein, dann können sie als ** real ** optional deklariert werden, oder wenn sie niemals "nil" sind, deklarieren Sie sie als nicht optional. – vadian

Antwort

4

Alamofire-Anforderung, die den Parameter im [String: AnyObject] -Format übernimmt, so dass Sie nur das Dictionary als Parameter übergeben müssen. in Ihrem Fall müssen Sie nur mögen:

let userEmail = userEmailField.text! 
let userPassword = userPasswordField.text! 

var dictParameter: Dictionary<String, AnyObject> = [:] 
dictParameter["USERNAME"] = userEmail 
dictParameter["PASSWORD"] = userPassword 

Und danach einfach machen Anfrage:

AlamofireService.alamofireService.makePostServiceRequest(URL_BASE, parameters: dictParameter, resposeCallback: self) 
+0

Und der beste Weg, um mit der Antwort umzugehen ist Alamofire Object Mapper, richtig? –

+0

Ja, ich finde es gut, mit Object Mapper zu arbeiten! –

+0

Und was, wenn ich ein Objekt senden muss? weil es zu viele Informationen gibt, die ich senden muss, und es wäre zu kompliziert, als Wörterbuch zu schreiben? –

0

Sie müssen Ihre Parameter nicht in eine Zeichenfolge konvertieren, sondern nur Parameter als Wörterbuch an Alamofire übergeben.