美文网首页
在swift中如何用weak修饰Array

在swift中如何用weak修饰Array

作者: Ashen_ | 来源:发表于2017-09-19 09:30 被阅读99次

在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

相关文章

网友评论

      本文标题:在swift中如何用weak修饰Array

      本文链接:https://www.haomeiwen.com/subject/xtylsxtx.html