试图理解正确的编程方法,以便从进行外部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)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)