闭包例子

99 阅读1分钟

方法字段

定义方法类型

typealias Fn = (Int) -> Int

字段

var fn: Fn?

实现

func fn2(num1: Int) -> Int {
    return num1
}
self.fn = fn2(num1:)

调用

if let fn1 = self.fn {
    print(fn1(10))
}

个人理解闭包

理解的闭包

  • 目的: 回调数据
  • 几个角色:函数、实现函数、调用函数
  • 定义函数 callBack(Any response)
  • 调用函数:所有网络请求都是异步的,请求结束后。需要把刷新UI 总不能把UI刷新都放在网络请求中吧 。所以需要把数据带出去。所以类似调用函数 callBack(response); 这里不管实现的,因为你可能刷新UI 你也可能加工数据对吧。所以我不管
  • 实现函数:数据带过来我自己做主就行

网络请求方法

image.png

image.png

函数字段

无参数

typealias voidBackFn = () -> Void

var callBackOnTapFn: voidBackFn?

callBackOnTapFn?()

iconsView.callBackOnTapFn = {
    Log("点击事件回调")
}

调用的时候 三种方式

if callBackOnTapFn != nil {
    callBackOnTapFn!()
}

if let callBack = callBackOnTapFn {
    callBack()
}

// 推荐这个
callBackOnTapFn?()

实现的时候

iconsView.callBackOnTapFn = {
    () -> () in
    Log("点击事件回调")
}

iconsView.callBackOnTapFn = {
    () -> Void in
    Log("点击事件回调")
}

// 推荐
iconsView.callBackOnTapFn = {
    Log("点击事件回调")
}

有参数

typealias indexBackFn = (_ index: Int) -> Void

var callBackShareTypeBlock: indexBackFn?

callBackShareTypeBlock?(2)


iconsView.callBackShareTypeBlock = {
    index in
    Log(index)
}

全乎一点的

iconsView.callBackShareTypeBlock = {
    (index: Int) -> Void in
    Log(index)
}

iconsView.callBackShareTypeBlock = {
    (index: Int) in
    Log(index)
}

iconsView.callBackShareTypeBlock = {
    index in
    Log(index)
}

我感觉还是别省略了 都好好写 这样好懂了