編集:解決済み、下記の私の解決策を参照してください。私はそれがなぜ機能するかについてはまだ興味がありますが、おそらくあなたの解決策はこれを説明することができますか?Swift 3オプションのプロトコル用バインド
〜
通知センター通知を使用してオブジェクトを渡しています。
私の目標は、特定のに準拠する場合は、notification.object
をオプションでアンラップすることです。
問題はテスト中ですが、アンラップが失敗していることがわかりましたが、なぜその理由がわかりません。
NotificationsPipelineProtocol
に付着し、それらの通知にサブスクライブ受信オブジェクトへの通知と一緒にこれらのオブジェクトを送信する(時にはenum
、struct
)オブジェクトの一連。
だから例えば私は通知パイプラインにしてReleaseNoteを渡した場合、私はそれは、プロトコルに加入する必要があります:私はNotificationCenter
に加入するすべての項目に書かれた拡張機能を投稿したい
enum ReleaseNote: Float, NotificationsPipelineProtocol {
...
NotificationsPipelineProtocol
に呼び出されます:
// finishing task, wants to post completion
...
self.postCompletion()
...
が
func postCompletion() {
NotificationCenter.default.post(name: self.completionNotificationName, object: self)
}
この関数を呼び出します
私はこの機能を使用して適切に受け取ったことを保証しています
@objc private func didReceiveNotificationCompletion(_ notification : Notification) {
guard let completedNotification = notification.object as? NotificationsPipelineProtocol else {
return
}
しかしreturn
が実行されるため、上記のガード文は、オプションをアンラップと結合しません。
私はnotification.object
をコンソールに印刷しましたが、実際に目的のオブジェクトを受け取っていることを保証しています。
なぜそれが開かれないのでしょうか?
NSValueまたはNSNumberで.objectがラップされていませんか。実行時にプロパティクラスをチェックしてください。 –
私はコンソールに印刷すると '_SwiftValue'という結果が出る – achi
NSObjectプロトコルのいくつかの種類にブリッジする必要があるかもしれませんか? NotificationCenterがObjective-Cに橋渡しされていることを認めていますか? – achi