ios – Swift:异步回调

ios – Swift:异步回调,第1张

概述如何在swift中进行异步回调?我正在为我的应用程序写一个框架,因为它应该运行在iOS和OS X上。所以我把不是特定于设备的主要代码放在这个框架中,它也处理对我的在线api的请求。显然,我也想要应用程序的GUI,因此,一旦api请求完成,我的ViewController将作出反应。在Objective-C中,我通过保存包含id变量中必须调用的函数的视图,并将函数本身保存在选择器变量中。然后我使用以 如何在swift中进行异步回调?我正在为我的应用程序写一个框架,因为它应该运行在iOS和OS X上。所以我把不是特定于设备的主要代码放在这个框架中,它也处理对我的在线API的请求。显然,我也想要应用程序的GUI,因此,一旦API请求完成,我的VIEwController将作出反应。在Objective-C中,我通过保存包含ID变量中必须调用的函数的视图,并将函数本身保存在选择器变量中。然后我使用以下代码调用该函数:

SEL selector = callbackMethod;((voID (*)(ID,SEL))[callbackVIEwController methodForSelector:selector])(callbackVIEwController,selector);

如何快速完成这项工作?还是有更好的方法呢?

我非常感谢你的帮助!

解决方法 我在以下要点中共享了我用于此场景的模式: https://gist.github.com/szehnder/84b0bd6f45a7f3f99306

基本上,我创建一个单一的DataProvIDer.swift设置一个AFNetworking客户端。然后VIEw Controller在DataProvIDer上调用方法,每个都由一个被定义为一个名为ServiceResponse的类型的闭包终止。此关闭返回字典或错误。

它允许您非常干净地(imo)从VC调用异步数据 *** 作,并非常清楚地指示当异步响应返回时要执行的 *** 作。

DataProvIDer.swift

typealias ServiceResponse = (NSDictionary?,NSError?) -> VoIDclass DataProvIDer: NSObject {    var clIEnt:AFhttpRequestoperationManager?    let LOGIN_URL = "/API/v1/login"    class var sharedInstance:DataProvIDer {        struct Singleton {            static let instance = DataProvIDer()        }        return Singleton.instance    }    func setupClIEntWithBaseURLString(urlString:String) {        clIEnt = AFhttpRequestoperationManager(baseURL: NSURL.URLWithString(urlString))        clIEnt!.operationQueue = NSOperationQueue.mainQueue()        clIEnt!.responseSerializer = AFJsONResponseSerializer()        clIEnt!.requestSerializer = AFJsONRequestSerializer()    }    func loginWithEmailPassword(email:String,password:String,onCompletion: ServiceResponse) -> VoID {        self.clIEnt!.POST(LOGIN_URL,parameters: ["email":email,"password":password],success: {(operation:AFhttpRequestoperation!,respon@R_301_6892@bject:AnyObject!) -> VoID in            self.setupClIEntWithBaseURLString("http://somebaseurl.com")            let responseDict = respon@R_301_6892@bject as NSDictionary                // Note: This is where you would serialize the nsdictionary in the respon@R_301_6892@bject into one of your own model classes (or core data classes)                onCompletion(responseDict,nil)            },failure: {(operation: AFhttpRequestoperation!,error:NSError!) -> VoID  in                onCompletion(nil,error)            })    }}

MyVIEwController.swift

import UIKitclass MyVIEwController: UIVIEwController {    overrIDe func vIEwDIDLoad() {        super.vIEwDIDLoad()        // Do any additional setup after loading the vIEw.    }    overrIDe func vIEwWillAppear(animated: Bool)  {        super.vIEwWillAppear(animated)        DataProvIDer.sharedInstance.loginWithEmailPassword(email:"some@email.com",password:"somepassword") { (respon@R_301_6892@bject:NSDictionary?,error:NSError?) in            if (error) {                println("Error logging you in!")            } else {                println("Do something in the vIEw controller in response to successful login!")            }        }    }  }
总结

以上是内存溢出为你收集整理的ios – Swift:异步回调全部内容,希望文章能够帮你解决ios – Swift:异步回调所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1072689.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存