测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2016年7月 |
SPM支持 SPM | ✓ |
由Jesse Squires维护。
由于 Swift 3.0 和提案 SE-0069,此库不再必要。
Foundation 现在提供了一个 Notification
结构。不幸的是,它不像此库提供的值类型那样是泛型的 —— Notification<T, U>
,但是处理命名空间之间的麻烦/混淆(Foundation.Notification
与 JSQNotificationObserverKit.Notification
)使得这个库不值得。
Cocoa 和 CocoaTouch 的泛型通知和观察器,灵感来源于objc.io
这个库旨在提供有关通知的更好语义,将观察和处理通知的责任转移到一个轻量级、单功能的对象。它还带来了类型安全和更干净的 NSNotificationCenter
接口。更多信息请参考 objc.io 上的 片段 #16 中的《类型化通知观察者》。
阅读文档。使用 jazzy 生成。由 GitHub Pages 托管。关于 gh-pages
分支的更多信息。
import JSQNotificationObserverKit
查看包含的单元测试以获取更多示例和用法。
// Suppose we have a UIView that posts a notification when its size changes
let myView = UIView()
// This notification posts a CGSize value from a UIView sender
let notification = Notification<CGSize, UIView>(name: "NewViewSizeNotif", sender: myView)
// This observer listens for the notification described above
var observer: NotificationObserver<CGSize, UIView>?
// Register observer, start listening for the notification
observer = NotificationObserver(notification) { (value, sender) in
// handle notification
// the value and sender are both passed here
}
// Post the notification with the updated CGSize value
notification.post(CGSizeMake(200, 200))
// Unregister observer, stop listening for notifications
observer = nil
并非所有通知都与特定的发送者对象相关联。这是如何在 JSQNotificationObserverKit
中处理 nil
发送者的方法。此观察者将响应所有实例发送的通知。
// This notification posts a string value, the sender is nil
let notification = Notification<String, AnyObject>(name: "StringNotif")
// Post the notification
notification.post("new string")
// Register observer, this handles notifications from *any* sender
var observer: NotificationObserver<String, AnyObject>?
observer = NotificationObserver(notification) { (value, sender) in
// handle notification
// the value is passed here, sender is nil
}
// unregister observer, stop listening for notifications
observer = nil
您可以可选地传递一个 NSOperationQueue
和 NSNotificationCenter
。默认值分别为 nil
和 。
// Initialize an observer and post a notification
// with a custom notification center and operation queue
let c = NSNotificationCenter.defaultCenter()
let q = NSOperationQueue.mainQueue()
let observer = NotificationObserver(n, queue: q, center: c) { (value, sender) in
// handle notification
}
notification.post(v, center: c)
并非所有通告都与特定的值相关联。有时通告仅用于简单地广播事件,例如 UIApplicationDidReceiveMemoryWarningNotification
。
let notification = Notification<Any?, AnyObject>(name: "MyEventNotification")
let observer = NotificationObserver(notification) { (value, sender) in
// handle notification
// value is nil, sender is nil
}
// notification value is `Any?`, so pass nil
notification.post(nil)
库还可以处理操作系统发布的“传统”通告。而不是使用 (value, sender)
处理器,请使用传递整个 NSNotification
对象的 (notification)
处理器。
let notification = CocoaNotification(name: UIApplicationDidReceiveMemoryWarningNotification)
let observer = CocoaObserver(notification, handler: { (notification: NSNotification) in
// handle the notification
})
// the notification will be posted by iOS
存在一套针对 JSQNotificationObserverKit.framework
的单元测试。要运行它们,请打开 JSQNotificationObserverKit.xcodeproj
,选择 JSQNotificationObserverKit
方案,然后按 ⌘-u。
这些测试有详细的注释,并作为如何使用此库的 further documentation。
请遵循以下美味的 contribution guidelines。
由 @jesse_squires 创建和维护。
JSQNotificationObserverKit
按 MIT 许可 发布。有关详细信息,请参阅 LICENSE
。
版权所有 © 2014-至今 Jesse Squires。
请提供归因于utorication,我们非常感激。