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

Posted

技术标签:

【中文标题】如何提取内部响应值并将其传递给 UserModel【英文标题】:how to extract inner response values and pass it to UserModel 【发布时间】:2016-04-22 19:00:12 【问题描述】:

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

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

【问题讨论】:

根据报错信息response["SUCCESS"]返回Response&lt;AnyObject, NSError&gt;而不是NSArray @vadian 我试图更改为 as? 没用 您是否在文档中查找了 API 的正确签名? 你能看到更新吗 你对我下面的回答有什么好运气吗? 【参考方案1】:

我相信您可以使用 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,以保持命名函数的最佳实践。

【讨论】:

以上是关于如何提取内部响应值并将其传递给 UserModel的主要内容,如果未能解决你的问题,请参考以下文章

从 Django 中的 JsonResponse 中提取字段值并将其传递给 Ajax Jquery

如何从文本字段中获取值并将其传递给变量?

Laravel - 如何获取选择值并将其传递给 RegisterController create()

如何获取单选按钮的值并将其传递给 laravel 中的控制器?

如何从小部件的函数返回值,并将其传递给 Tkinter,Python 中的另一个小部件的函数

如何从 Javascript 提示框中获取值并将其传递给 PHP 变量以便能够保存在 SQL 中?