swift回调的实现
来源:互联网 发布:编程语言特点 编辑:程序博客网 时间:2024/06/05 07:28
最近在学习ios开发,刚刚学习了一下swift
我们都知道访问网络一般都是通过回调的形式来实现的,这里我搜索了下,学习到了3种方法,当然肯定有其他的方式,不过常用或者说比较容易理解的就是这三种
一、使用protocol的方式
首先声明一个protocol NetCallback,类似于java中的接口/抽象类,里面一个方法然后在类中输入声明一个方法,参数类型是NetCallback
import UIKitprotocol NetCallBack { func success(result:String)}
import UIKitclass NetHelper: NSObject { static func get(url:String ,callback:NetCallBack){ NSLog("url=%@", url) callback.success(result: "访问\(url)成功"); }}
调用
struct cb:NetCallBack{ func success(result:String){ NSLog("结果是:%@", result) }}NetHelper.get(url: "www.baidu.com", callback: cb() as NetCallBack)
这样就可以实现调用,也很好理解,声明一个构造体实现了NetCallBack协议,然后将构造体cb作为一个参数传入,方法体内就会掉到success
二、使用闭包作为目标字段的方式
闭包的话,可以参考下网上的blog帖子啥的
class NetHelper: NSObject { var url:String static func get(url:String ,callback:NetCallBack){ NSLog("url=%@", url) callback.success(result: "访问\(url)成功"); } func exec(){ getCallBack!("result") } var getCallBack:((String)->(Void))? init(url:String){ self.url = url }}
这里的getCallBack声明了一个变量类型是需要传String参数,没有返回值
调用
let helper:NetHelper = NetHelper(url: "www.sina.com")helper.getCallBack = {(result)->Void in NSLog("结果为:\(result)")}helper.exec()
这里大概就是声明了一个对象,设置对象的callBack为自己定义的闭包,最后log输出 结果为:result
三、直接在方法中声明闭包作为参数
这也是比较被推荐的一个,因为使用时结构清晰,也容易理解
class NetHelper: NSObject { var url:String init(url:String){ self.url = url } func exec(cb: (_ result:String)->()){ NSLog("访问%@", url) cb("json"); }}
使用时
let helper:NetHelper = NetHelper(url: "www.sina.com")helper.exec { (result) in NSLog("闭包回调结果是:\(result)")}
这里输出结果为: 闭包回调结果是:json
结语
这三种方式,根据自己的实际需要来用,其实我个人觉得第三种比较合适,将请求封装,回调也比较清楚,失败的回调下次再研究
阅读全文
0 0
- swift回调的实现
- Swift-UITableView的实现
- swift秒表的实现
- swift二维码的实现
- opencv的swift实现
- Swift 异步加载回调 callBack 实现
- UIActivityViewController的使用(Swift实现)
- swift 实现简单的动画
- swift观察者模式的实现
- swift观察者模式的实现
- Swift实现数据的存储
- swift中单例的实现方法
- Swift实现自定义的UITabBarController
- Swift的协议默认实现
- Swift中单例的实现方法
- swift 二维码识别的实现
- swift 单例的实现
- Swift中栈的实现
- 在AndroidStudio2.3.2下JNI开发的详细步骤
- SVM学习总结(二)SVM算法流程图
- 七牛云简单上传图片 展示
- AIDL基本使用3—-in out inout的用
- C++ DLL编程时报错:无法解析的外部符号
- swift回调的实现
- Google官方指导文章:开始用Kotlin开发Android
- python连hive
- mysql大批量更新数据
- Qt应用程序发布
- 获取网络的api 的例子
- js中几种实用的跨域方法原理详解
- Echarts之map地图隐藏港澳台等区域
- 134. Gas Station