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)
}