如何提取内部响应值并将其传递给UserModel

时间:2016-04-22 19:00:13

标签: ios json parsing httpresponse alamofire

我正在使用alamofire从web api获取HTTP响应。只是想问一下如何在不使用swift对象映射框架的情况下解析JSON值,并将其传递给authenticatedUser。我有一些loadUserData问题,因为响应返回响应类型和我的函数与NSArray工作正常我如何转换为使用Response < / p>

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
}

1 个答案:

答案 0 :(得分: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
}

我还会在您的loadUserData方法中执行更多错误检查,因为最好不要假设userauthenticated始终存在(如果他们的应用会崩溃,您的应用会崩溃不要或他们的价值观是不同的类型)。

我还建议您使用小写GetUserCredential命名getUserCredential,以保持命名功能的最佳实践。