iOS NotifcationフレームワークのZRNotify
2138 ワード
最近のプロジェクトでは、通知で処理するところもありましたが、原生の通知の使い方は本当に気持ち悪いので、自分で書くつもりでしたが、GitHubに似たようなプロジェクトがあるのを見て、ソースコードを研究しました.簡潔ですが、通知の使い方をもっと簡潔にしました.GitHubプロジェクトアドレス:https://github.com/ZeroFengLee/ZRNotify
まず、このフレームワークを使用して、通知の使用方法について、従来の通知の使用方法を変更する方法について説明します.
ZRNotifyを使用した後の使用方法:
上記のコードから分かるように、最大の違いはモニタリング通知の部分であり、モニタリングされた通知結果はblockで返され、コードが分散しすぎないことである.しかし、このフレームワークは複数の通知に対して、いくつかの高級な遊び方があります.一:チェーンモニタリング、
二:統一モニタリング処理
ソースの解読:
実はソースコードは主に2つの問題を解決するためです:1、結果コールバック2、チェーン呼び出し
彼は
通知が呼び出されると、通知名に従ってnotifyTypeオブジェクトを検索し、コールバックを開始します.
実装コードはこれより少し複雑かもしれません.このフレームワークを使用すると、従来のコード構造に大きな向上があることが明らかになり、興味のあるものはソースコードを見ることができます.
まず、このフレームワークを使用して、通知の使用方法について、従来の通知の使用方法を変更する方法について説明します.
//
NotificationCenter.default.addObserver(self, selector: #selector(acceptNotify), name: NSNotification.Name(rawValue: "NotifyName"), object: nil)
func acceptNotify(notify: Notification) {
print(notify)
}
//
NotificationCenter.default.post(name: Notification.Name(rawValue: "NotifyName"), object: "hello")
ZRNotifyを使用した後の使用方法:
//
ZRNotify().on("NotifyName", notify: { notify in
print(notify.object)
})
//
NotificationCenter.default.post(name: Notification.Name(rawValue: "NotifyName"), object: "hello")
上記のコードから分かるように、最大の違いはモニタリング通知の部分であり、モニタリングされた通知結果はblockで返され、コードが分散しすぎないことである.しかし、このフレームワークは複数の通知に対して、いくつかの高級な遊び方があります.一:チェーンモニタリング、
ZRNotify().on("ScheduleA", notify: { notify in
print(notify.object)
}).on("ScheduleB", notify: { notify in
print(notify.object)
})
二:統一モニタリング処理
notify.ons(["ScheduleA", "ScheduleB"], notify: { notify in
print(notify.object)
})
ソースの解読:
実はソースコードは主に2つの問題を解決するためです:1、結果コールバック2、チェーン呼び出し
彼は
notifyPool
を使用してすべての通知を管理し、インタフェースonとonsを呼び出すとnotifyTypeオブジェクトをロードします.public typealias notifyType = ((Notification) -> Void)
fileprivate var notifyPool: [(String, notifyType?)] = []
通知が呼び出されると、通知名に従ってnotifyTypeオブジェクトを検索し、コールバックを開始します.
func receiveNotify(_ notification: Notification) {
for notify in notifyPool {
guard notify.0 == notification.name.rawValue else {
continue
}
notify.1?(notification)
}
}
実装コードはこれより少し複雑かもしれません.このフレームワークを使用すると、従来のコード構造に大きな向上があることが明らかになり、興味のあるものはソースコードを見ることができます.