編輯:解決了,請參閱我的解決方案。我仍然很好奇它爲什麼有效,也許你的解決方案可以解釋這一點?Swift 3可選的綁定協議
〜
我使用NotificationCenter發佈通知傳遞一個對象。
我的目標是如果它堅持某個,可選擇拆開notification.object
。
問題是在測試中,解包被證明不成功,我不知道爲什麼。
的一系列對象(有時是enum
,有時struct
)誰堅持NotificationsPipelineProtocol
和與通知給誰預訂這些通知接收對象一起發送的那些對象。
因此,舉例來說,如果我在的通知管道傳遞ReleaseNote我會有它訂閱協議:
enum ReleaseNote: Float, NotificationsPipelineProtocol {
...
當我想張貼到NotificationCenter
訂閱的所有項目編寫了一個擴展功能到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
控制檯,並保證它實際上是接收預期的對象。
你可能有任何想法爲什麼它不會解開?
是不是到達.object包裹在NSValue或NSNumber?在運行時檢查屬性類。 –
我給出了結果:'_SwiftValue'當我打印到控制檯 – achi
可能是我需要將它連接到某種NSObject協議?授予通知中心橋接到Objective-C? – achi