Swift中几种回调的方法

在OC中,最常用的回调方式是代理和Block,Swift中有代理,没有Block,取代的是闭包.

这是别人总结的闭包原理及处理方式,我就不做赘述
http://www.cocoachina.com/ios/20161201/18250.html

接下来直接介绍闭包如何实现回调(推荐)
我们会经常遇到在cell中有按钮点击事件,我们需要在ViewController中做回调处理.
在一个Cell中

// 1.定义一个闭包类型
typealias swiftBlock = (_ btnTag : Int) -> Void

// 2. 声明一个变量
var callBack: swiftBlock?

// 3. 定义一个方法,方法的参数为和swiftBlock类型一致的闭包,并赋值给callBack
func callBackBlock(block: @escaping swiftBlock) {
       callBack = block
}

// 按钮点击方法
@IBAction func btnClick(_ sender: UIButton) {
        //4. 调用闭包,设置你想传递的参数,调用前先判定一下,是否已实现
        if callBack != nil {
            callBack!(sender.tag)
        }
}

在ViewController

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       let cell = tableView.dequeueReusableCell(withIdentifier:"cellID")

       // 实现闭包,获取参数
        deviceCell.callBackBlock { (tag) in
                print(tag)
        }
        return cell
}

也可以使用代理方式来做
在cell中

//  1. 定协议
protocol MyDelegate {
    func delegateNeedDo(strMessage:String) -> ()
}

//  2. 声明变量
var delegate:MyDelegate?

// 3.  点击调用
@IBAction func btnClick(_ sender: UIButton) {
        delegate?.delegateNeedDo(strMessage: "\(sender.tag)")
}

在ViewController中

首先声明代理

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = tableView.dequeueReusableCell(withIdentifier:"cellID")
         cell.delegate = self
         return cell
}

// 实现代理方法,按钮点击时调用
func delegateNeedDo(strMessage:String) {
        print(strMessage)
}

推荐使用闭包
还有一种方式实现回调,通过selector
http://www.jianshu.com/p/49eb4a767541

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,240评论 30 472
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,273评论 4 61
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,316评论 1 23
  • 为这一男孩的远方遥望而作1我,曾遥想远方,如水的模样像多愁的青春那样感伤 把,思念的信笺拆封任由思绪,翻飞在春天的...
    郭安安阅读 930评论 47 46
  • 常言道:人生不如意十有八九。你又真的在意如何讨人生吗?只是不知如何把人生过的身心都舒服,却是真的想法。 好像什么都...
    梦的精灵解梦客阅读 254评论 0 0