
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:异步回调所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)