NotificationCenter使用评论家Swift 4

NotificationCenter是您可以根据应用程序范围内的操作触发事件的地方。

用法经过多年发展,变得更加安全。 即使是这种情况,使用选择器和填充物仍然保留目标c的痕迹。

当我决定开始实施某些功能时,我通常不会考虑通过框架来实施。

首先,我认为我要如何解决该问题并略微调整框架的使用方式来满足我自己的需求。

一般的做法:

提供Notification.Name是为了在触发和接收动作时不会将类型与字符串错字混淆。

为了更好地进行管理,可以在Notification Name类上进行扩展,并可以在其中静态定义通知名称。

  扩展Notification.Name { 

静态让MagicHappened = Notification.Name(“ MagicHappened”)

}

您发布通知:

  NotificationCenter.default.post(名称:Notification.Name.MagicHappened,对象:self,userInfo:[“ eventId”:“ 4392349jfjasdfj234”]) 

然后添加观察者

  NotificationCenter.default.addObserver(自身,选择器:#selector(magicHappened(_ :)),名称:Notification.Name.MagicHappened,对象:nil) 

然后,您还可以添加选择器方法

  @objc private func magicHappened(_通知:通知){ 
打印(“魔术偶然在乎。”)
}

当然之后,您还需要删除观察者。

现在黄油来了。

主要用法应以安全,静态的方式触发操作,而不会带来很多麻烦。

接收广播应该以一种更自然的方式进行,只需提及您想听的内容以及发生时要做的事情,并传递数据即可。

这就是为什么我在通知中心使用情况上写了一个包装器的原因。

我决定使用枚举’ ZMLocalBroadcastType ‘作为起点。 这种用法对于任何人来说都很容易扩展。

如果您有新的使用通知类型,则只需再添加一个case语句。

通知名称太宽泛,这就是为什么我选择localbroadcast作为名称的原因。

之后,我为通知观察创建了一个新的代理侦听器类,该类从viewcontroller的闭包中委派了工作。

首先从触发通知开始。

广播:

数据是可选的,可以广播。

观察:

您需要坚持观察者,以便在时间到时停止观察。 这是绝对必要的。 否则,观察对象将丢失在大天空的深处,并且观察将无法进行。

时间到了deinit或任何其他块。 您只需停止观察即可。

这种方法使我更容易扩展通知类型。 清除我手指不必要的打字肌肉。

您可以在此处查看整个存储库。

这是对该主题的非常快速的解释。 感谢您的支持:)。

请删除注释以进一步讨论该主题。

谢谢

stkrksgl

参考文献

https://developer.apple.com/documentation/foundation/notificationcenter/