首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >iOS_Swift多代理

iOS_Swift多代理

作者头像
mikimo
发布2022-07-20 14:06:07
发布2022-07-20 14:06:07
5390
举报
文章被收录于专栏:iOS开发~iOS开发~
代码语言:javascript
复制
protocol MOLocationManagerDelegate: NSObjectProtocol {
  func locationUpdate(_ locs:[String])
}

class MOLocationManager {
  static let shared: MOLocationManager = MOLocationManager()
  
  // 1. NSHashTable中的元素可以通过Hashable协议来判断是否相等.
  // 2. NSHashTable中的元素如果是弱引用,对象销毁后会被移除,可以避免循环引用
  private let multiDelegate: NSHashTable<AnyObject> = NSHashTable.weakObjects()
  
  // MARK: - 需要代理们回调的方法
  func locationUpdate() {
    invoke{ $0.locationUpdate(["北京", "海淀"]) }
  }
  
  func add(_ delegate: MOLocationManagerDelegate) {
    multiDelegate.add(delegate)
  }
  
  func remove(_ delegate: MOLocationManagerDelegate) {
    invoke {
      if $0 === delegate as AnyObject {
        multiDelegate.remove($0)
      }
    }
  }
  
  func removeAll() {
    multiDelegate.removeAllObjects()
  }
  
  private func invoke(_ invocation: (MOLocationManagerDelegate) -> Void) {
    for delegate in multiDelegate.allObjects.reversed() {
      invocation(delegate as! MOLocationManagerDelegate)
    }
  }
}

github Demo连接

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档