2016-04-22 7 views
1

Ich benutze Alamofire, um HTTP-Antwort von Web-API zu erhalten. möchte nur fragen, wie JSON-Werte von der Antwort ohne Verwendung von schnellen Objekt-Mapper-Frameworks zu analysieren und an authenticatedUser übergeben kann. Ich habe ein Problem mit LoadUserData, weil Antwort zurück Antwort-Typ und meine Funktion gut mit NSArray Wie kann ich konvertiert mit Antwortwie interne Antwortwerte extrahiert und an UserModel übergeben werden

arbeiten
func GetUserCredential(username:String,password:String)->UserModel 
{ 
    let authenticatedUser = UserModel() 
    let user = username 
    let password = password 

    let credential = NSURLCredential(user: user, password: password, persistence: .ForSession) 

    Alamofire.request(.GET, "https://httpbin.org/basic-auth/\(user)/\(password)") 
     .authenticate(usingCredential: credential) 
     .responseJSON { response in 
      return self.loadUserData(response); 

    } 

    return authenticatedUser; 

} 

func loadUserData(response: Response<AnyObject, NSError>) -> UserModel 
{ 
    var userObj = UserModel() 
    for resp as? Response<AnyObject, NSError> in response 
    { 
     let user:String = (resp["user"] as! String) 
     let isAuthenticated:Bool = (resp["authenticated"] as! Bool) 
     let isManager:Bool = true 

     userObj = UserModel(username:user,isAuthenticated:isAuthenticated,isManager:isManager) 
    } 
    return userObj 
} 
+0

Nach der Fehlermeldung Antwort ["SUCCESS"] 'return'Response ' statt 'NSArray' – vadian

+0

@vadian Ich habe versucht, zu ändern als? keine Verwendung – NinjaDeveloper

+0

Haben Sie die richtige Signatur der API in der Dokumentation nachgeschlagen? – vadian

Antwort

4

Ich glaube, Sie können dies mit einem Alamofire Antwortobjekt tun.

if let validResponse = response.result.value as? [String : AnyObject] { 
    return loadUserData(validResponse); 
} 

Ich würde ändern Sie Ihre loadUserData dazu:

func loadUserData(response: [String : AnyObject]) -> UserModel 
    // Do everything you're doing in loadUserData 
} 

Ich würde auch mehr Fehler machen Überprüfung in Ihrem loadUserData Verfahren, wie es am besten ist, nicht davon ausgehen, dass user und authenticated wird es immer geben (Ihre Anwendung wird abstürzen, wenn sie nicht oder wenn ihre Werte von verschiedenen Typen sind).

Ich würde auch vorschlagen, Sie benennen GetUserCredential mit einem Kleinbuchstaben getUserCredential, um in Best Practice für die Benennung von Funktionen zu halten.