在swift中如何用weak修饰Array

在swift中, weak 只能修饰class 和protocol

weak may only be applied to class and class-bound protocol types

考虑如下场景,如果希望有多个delegat的话, 应该如何实现呢?
方案一是: NSPointerArray


talk is cheap, show me the code

/// 初始化
var delegates = NSPointerArray(options: .weakMemory)

/// 添加
let pointer = Unmanaged.passUnretained(strongObject).toOpaque()
delegates.addPointer(pointer)

/// 移除,如果需要移除指定元素, 还需要先获取元素的index
delegates.removePointer(at: index)

虽然使用起来相当简单, 毕竟Unmanaged这些代码看起来相当不直观,于是我简单得封装了一下,现在使用如下

/// 初始化, 泛型传入代理类型
var delegates = WeakArray<someProtocol>()

// 添加
delegates.add(someProtocol1)

// 移除
delegates.remove(someProtocol2)

// 触发代理
delegates.excute(block)      // block: ((someProtocol?)->)

详见demo: weak_Delegates

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

推荐阅读更多精彩内容