Swift中的通用闭包函数,自定义属性、传参(block)

2022-03-04  本文已影响0人  9岁就很6

在全局配置文件中 声明
一个不带参数和一个带泛型<T>类型的参数 typealias,

声明代码如下

//通用block
typealias BlockWithNone = () -> ()
//T可以代表元组、单个对象
typealias BlockWithParameters<T> = (T) -> ()
 

typealias BlockWithNone 就类似oc中的 typedef void(^bolck)(); typealias BlockWithParameters 就类似oc中的 typedef void(^bolck)(NSObject *object);

<T> 这边的T可以理解为占位,使用他的时候直接传入你想要的对象作为参数传递

使用代码如下
.1属性 无参数

  public var successBlock: BlockWithNone?
    
  public var errorBlock: BlockWithNone?
    
//当前类直接调用即可,类似OC的 !block?:block()

successBlock?()

errorBlock?()

//外部调用这个block 

 vc. successBlock = {
            print("无参数block-successBlock 回调成功")
        }

 vc. errorBlock = {
            print("无参数block-errorBlock 回调成功")
        }

.2属性 有参数 T 可以代表多个参数 例如随便声明4个带参闭包

 /// 回调一组 元组
    var didBlock: BlockWithParameters<(index: Int, word: String)>? = nil

   var textChangeBlock: BlockWithParameters<(IndexPath, String)>?

    var deleteBlock: BlockWithParameters<IndexPath>?
    
   var selectBlock: BlockWithParameters<NSobjce>?


//当前类直接调用即可,类似OC的 !block?:block(参数1,参数2)

didBlock?((3,"文本"))

textChangeBlock?((indexPath, "文本"))

deleteBlock?(indexPath)

selectBlock?(model)


//举例 外部调用这个textChangeBlock 
//tuple 元组 直接取第1、第二
  cell.textChangeBlock = { [weak self] tuple in
            print("\(indexPath: tuple.0)") 
            print("\(indexPath: tuple.1)") 
        }


 searchView.selectBlock = { [weak self] model in
             print(model)
        }

上一篇下一篇

猜你喜欢

热点阅读