emitter-kit v5.2.2
用于替换 NSNotificationCenter#addObserver
和 NSObject#addObserver
的类型安全且简洁的程序。
import EmitterKit
// A generic event emitter (but type-safe)!
var event = Event<T>()
// Any emitted data must be the correct type.
event.emit(data)
// This listener will only be called once.
// You are *not* required to retain it.
event.once { data: T in
print(data)
}
// This listener won't stop listening;
// unless you stop it manually,
// or its Event<T> is deallocated.
// You *are* required to retain it.
var listener = event.on { data: T in
print(data)
}
// Stop the listener manually.
listener.isListening = false
// Restart the listener (if it was stopped).
listener.isListening = true
目标定位
目标允许您将特定的 AnyObject
与一个 emit
调用关联起来。当您需要发射与您不能添加属性类的类相关的事件(如 UIView
)时,这很有用。
调用 emit
时,您还必须使用相同的目标调用 on
或 once
,以便接收已发射的事件。
let myView = UIView()
let didTouch = Event<UITouch>()
didTouch.once(myView) { touch in
print(touch)
}
didTouch.emit(myView, touch)
NSNotification
当您被迫使用 NSNotificationCenter
(例如,如果您想知道键盘何时出现)时,Notifier
类有帮助。
// You are **not** required to retain this after creating your listener.
var event = Notifier(UIKeyboardWillShowNotification)
// Handle NSNotifications with style!
listener = event.on { (notif: Notification) in
print(notif.userInfo)
}
键值观察(KVO)
// Any NSObject descendant will work.
var view = UIView()
// "Make KVO great again!" - Donald Trump
listener = view.on("bounds") { (change: Change<CGRect>) in
print(change)
}
线程安全
以下操作必须在同一线程上进行,或者您需要进行手动锁定:
- 触发事件
- 添加/删除监听器
- 设置监听器的
isListening
属性
v5.2.2 变更记录
- 修复协议转换错误(#60)
v5.2.1 变更记录
- 修复Carthage兼容性(非iOS平台)
v5.2.0 变更记录
- 添加了
Event.getListeners
方法 - 监听器现在总是按照它们被添加的顺序被调用
- 可以调用不带参数的
Event.emit()
- 改善了Carthage的兼容性
v5.1.0 变更记录
-
NotificationListener
类现在接收一个Notification
而不是一个NSDictionary
。 -
没有目标的
NotificationListener
现在将接收名称为Notification
的每一个Notification
,不管notif.object
的值如何。
版本5.0.0 更新日志
-
支持 Swift 3.0 + Xcode 8.0 beta 6
-
已移除了
Signal
类。(请使用Event<Void>
代替) -
已移除了
Emitter
抽象类。 -
已将
EmitterListener
类重命名为EventListener<T>
。 -
Event<T>
类不再有父类。 -
已将
Notification
类重命名为Notifier
(以避免与Foundation.Notification
冲突)。 -
Event<T>
的on
和once
方法现在返回一个EventListener<T>
(而不是仅为Listener
) -
Notifier
的on
和once
方法现在返回一个NotificationListener
(而不是仅为Listener
) -
NSObject
的on
和once
方法现在返回一个ChangeListener<T>
(而不是仅为Listener
) -
现在
ChangeListener<T>
的keyPath
、options
和object
属性为公共。 -
向
Event<T>
类中添加了一个计算属性listenerCount: Int
。 -
向
EventListener<T>
类添加了一个属性event: Event<T>
。
旧版本的更新日志可以在此处找到。