gpt4 book ai didi

ios - 如何订阅全局委托(delegate)事件?

转载 作者:行者123 更新时间:2023-11-29 01:05:21 26 4
gpt4 key购买 nike

我有一个触发某些事件的自定义委托(delegate)。对于上下文来说,它是一个可以任意触发事件的蓝牙设备。我希望我的 View Controller 可以选择订阅由设备委托(delegate)触发的这些事件。

每个 View Controller 都符合自定义委托(delegate)是没有意义的,因为这意味着设备变量将是本地的并且只会在该 View Controller 中触发。其他 View Controller 不会意识到这一变化。另一个具体示例是 CLLocationManagerDelegate - 例如,如果我希望所有 View Controller 都监听 GPS 坐标变化怎么办?

相反,我更多地考虑的是所有 View Controller 都可以订阅的全局委托(delegate)。因此,如果一个 View Controller 触发请求,设备将为所有正在监听的订阅 View Controller 调用委托(delegate)函数。

如何实现这种架构设计?委托(delegate)不是正确的方法吗?我想也许 NotificationCenter 可以在这里提供帮助,但似乎类型太松散,也许抛出协议(protocol)有助于使事情更易于管理/优雅?任何帮助将不胜感激!

最佳答案

您可以让一组订阅者收到通知。

class CustomNotifier {

private var targets : [AnyObject] = [AnyObject]()
private var actions : [Selector] = [Selector]()


func addGlobalEventTarget(target: AnyObject, action: Selector) {

targets.append(target)
actions.append(action)
}

private func notifyEveryone () {

for index in 0 ..< targets.count {

if targets[index].respondsToSelector(actions[index]) {

targets[index].performSelector(actions[index])
}
}
}
}

当然,您必须进一步计划以维护目标操作的生​​命周期,并提供取消订阅等的方法。

注意:同样理想的是,目标和操作的数组是 weak 对象。 This SO question例如,涉及主题。

关于ios - 如何订阅全局委托(delegate)事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36458644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com