JSQNotificationObserverKit 5.0.1

JSQNotificationObserverKit 5.0.1

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2016年7月
SPM支持 SPM

Jesse Squires维护。



⚠️已过时⚠️

由于 Swift 3.0 和提案 SE-0069,此库不再必要。

Foundation 现在提供了一个 Notification 结构。不幸的是,它不像此库提供的值类型那样是泛型的 —— Notification<T, U>,但是处理命名空间之间的麻烦/混淆(Foundation.NotificationJSQNotificationObserverKit.Notification)使得这个库不值得。

JSQNotificationObserverKit

Cocoa 和 CocoaTouch 的泛型通知和观察器,灵感来源于objc.io

关于

这个库旨在提供有关通知的更好语义,将观察和处理通知的责任转移到一个轻量级、单功能的对象。它还带来了类型安全和更干净的 NSNotificationCenter 接口。更多信息请参考 objc.io 上的 片段 #16 中的《类型化通知观察者》。

要求

  • Xcode 7.3+
  • iOS 8.0+
  • OSX 10.10+
  • tvOS 9.1+
  • watchOS 2.0+
  • Swift 2.2

文档

阅读文档。使用 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

使用自定义队列和通知中心

您可以可选地传递一个 NSOperationQueueNSNotificationCenter。默认值分别为 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)

使用“传统”的 Cocoa 通告

库还可以处理操作系统发布的“传统”通告。而不是使用 (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 创建和维护。

许可证

JSQNotificationObserverKitMIT 许可 发布。有关详细信息,请参阅 LICENSE

版权所有 © 2014-至今 Jesse Squires。

请提供归因于utorication,我们非常感激。