2016-04-22 21 views
1

私はalamofireを使用してWeb APIからHTTP応答を取得しています。迅速なオブジェクトマッパーフレームワークを使用せずにレスポンスからJSON値を解析し、それをauthenticatedUserに渡す方法を尋ねたいだけです。応答の返されるレスポンスの型と関数がNSArrayでうまく動作するため、loadUserDataにいくつかの問題があります。レスポンス内部応答値を抽出してUserModelに渡す方法

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

エラーメッセージ 'response [" SUCCESS "]'は 'NSArray'ではなく'レスポンス 'を返します – vadian

+0

@vadian私はに変更しようとしましたか? no use – NinjaDeveloper

+0

ドキュメントのAPIの適切な署名を検索しましたか? – vadian

答えて

4

Alamofireレスポンスオブジェクトでこれを行うことができます。

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

私は変化するであろうあなたのloadUserDataこれまで:

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

それはuserauthenticatedが常に存在することを前提としないことが最善ですと、私はまた、あなたのloadUserData方法のチェックインより多くのエラーをするでしょう(あなたのアプリますそうでない場合、または値が異なるタイプの場合はクラッシュします)。

また、GetUserCredentialの名前を小文字のgetUserCredentialとすると、名前付け機能のベストプラクティスを保つことができます。