如何提取内部响应值并将其传递给 UserModel
how to extract inner response values and pass it to UserModel
我正在使用 alamofire 从 Web api 获取 HTTP 响应。只是想问一下如何在不使用 swift 对象映射器框架的情况下从响应中解析 JSON 值并将其传递给 authenticatedUser.I loadUserData 有一些问题,因为响应 return 响应类型和我的函数与 NSArray 一起工作正常我如何转换为与 Response
一起工作
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
}
我相信您可以使用 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
方法中进行更多错误检查,因为最好不要假设 user
和 authenticated
将始终存在(如果它们不存在,您的应用程序将崩溃) t 或者它们的值是否属于不同类型)。
我还建议您使用小写 getUserCredential
命名 GetUserCredential
以保持命名函数的最佳实践。
我正在使用 alamofire 从 Web api 获取 HTTP 响应。只是想问一下如何在不使用 swift 对象映射器框架的情况下从响应中解析 JSON 值并将其传递给 authenticatedUser.I loadUserData 有一些问题,因为响应 return 响应类型和我的函数与 NSArray 一起工作正常我如何转换为与 Response
一起工作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
}
我相信您可以使用 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
方法中进行更多错误检查,因为最好不要假设 user
和 authenticated
将始终存在(如果它们不存在,您的应用程序将崩溃) t 或者它们的值是否属于不同类型)。
我还建议您使用小写 getUserCredential
命名 GetUserCredential
以保持命名函数的最佳实践。