iOS NotifcationフレームワークのZRNotify

2138 ワード

最近のプロジェクトでは、通知で処理するところもありましたが、原生の通知の使い方は本当に気持ち悪いので、自分で書くつもりでしたが、GitHubに似たようなプロジェクトがあるのを見て、ソースコードを研究しました.簡潔ですが、通知の使い方をもっと簡潔にしました.GitHubプロジェクトアドレス:https://github.com/ZeroFengLee/ZRNotify
まず、このフレームワークを使用して、通知の使用方法について、従来の通知の使用方法を変更する方法について説明します.
//     
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)    
    }    
}

実装コードはこれより少し複雑かもしれません.このフレームワークを使用すると、従来のコード構造に大きな向上があることが明らかになり、興味のあるものはソースコードを見ることができます.