ios – swift2.0,从REST调用返回信息(Alamofire)

ios – swift2.0,从REST调用返回信息(Alamofire),第1张

概述伙计们,   试图理解正确的编程方法,以便从进行外部API调用返回数据. 在我开始创建自己的代码重用快速框架(管理我的应用程序的所有其他api调用)之前,我想问社区他们如何处理以下情况: 这里我们有一个按钮,可以在登录视图中点击,我们需要调用我们的auth服务,并对我们得到的东西作出反应. 的viewController: import myLib@IBAction func loginBut 伙计们,
  试图理解正确的编程方法,以便从进行外部API调用返回数据.

在我开始创建自己的代码重用快速框架(管理我的应用程序的所有其他API调用)之前,我想问社区他们如何处理以下情况:

这里我们有一个按钮,可以在登录视图中点击,我们需要调用我们的auth服务,并对我们得到的东西作出反应.

的vIEwController:

import mylib@IBAction func loginbuttonTapped(sender: AnyObject) {    let email = emailFIEld.text!    let password = pwFIEld.text!    let loginResult = mylib.login(email,password)    if (loginResult.success) {        NSUserDefaults.standardUserDefaults().setBool(true,forKey: "isUserLoggedIn")        NSUserDefaults.standardUserDefaults().synchronize()        self.dismissVIEwControllerAnimated(true,completion: nil)    } else {        displayAlertMessage(loginResult.message)    }}

mylib.login:

import Foundationimport Alamofireimport SwiftyJsONpublic func Login(email: String,password: String,completion: ((success: Bool,message: String?,token: String?) -> VoID)) {    let parameters: [String: String] = [        "username" : email,"password" : password    ]    let endpoint = "https://API.foo.bar/login"    Alamofire.request(.POST,endpoint,parameters: parameters,enCoding: .JsON)        .responseJsON { response in            guard response.result.error == nil else {                print(response.result.error!)                completion(success: false,message: "error calling POST on /account/login",token: nil)                return            }            if let value = response.result.value {                let APIResponseJsONBody = JsON(value)                completion(success: true,message: nil,token: APIResponseJsONBody["token"].string)            }    }}

>将结果作为结构传回是否正确?我注意到我们必须公开struct才能返回它.

谢谢!我非常感谢所有的反馈.

更新:相关问题发布:Swift Alamofire + Promise catching

解决方法 您不能使用Login方法的返回值,因为请求是异步的.

基本上,您的Login方法将始终立即返回success = false.

要异步返回,需要向Login添加一个完成块:

public func Login(email: String,completion: (success: Bool,token: String?) -> VoID) {    ...}

然后,当您收到Alamofire的回复时,请按以下方式调用您的完成块:

completion(success: false,token: nil)

从您的视图控制器,您可以像这样使用登录:

mylib.Login(email,password) { success,message,token in    if success {        ...    }}
总结

以上是内存溢出为你收集整理的ios – swift2.0,从REST调用返回信息(Alamofire)全部内容,希望文章能够帮你解决ios – swift2.0,从REST调用返回信息(Alamofire)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1049964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存