我試圖在我的應用程式中通過觀察到的通知傳遞資訊。這樣做的標準方法是設定用戶資訊。但是,我要傳遞的資料是 Set,而不是字典。
所以,我這樣做:
NotificationCenter.default.post(name: MY_NOTIFICATION_NAME, object:self.productIds)
該物件很好,但現在我無法到達它:
在控制臺中我這樣做:
po notification.object!
? 2 elements
- 0 : ZTJ
- 1 : ZTM
但是,當我嘗試訪問其中一個元素時,我得到了以下資訊:
po notification.object![0]
error: <EXPR>:8:21: error: value of type 'Any' has no subscripts
notification.object![0]
我究竟做錯了什么?
uj5u.com熱心網友回復:
您知道這notification.object是一個Set,但編譯器沒有,因為它被宣告為Any,這意味著它可以是任何東西,因此它無法找到object[0]它應該使用的實作。
要讀取此物件,您需要將其轉換為集合。
if let mySet = notification.object as? Set<MyType> {
// Do whatever
}
請記住, 的object屬性Notification旨在用作過濾器,如果您在添加觀察者時傳遞一個值,您將只會收到使用完全相同的物件發送的通知。
該userInfo詞典是發送相關的資訊,比如你的一套。在這種情況下,我會發送這樣的字典:
NotificationCenter.default.post(name: MY_NOTIFICATION_NAME, object: nil, userInfo: ["products": productIds])
uj5u.com熱心網友回復:
通知的物件型別為Any?。
當你po在控制臺中輸入它時,你要求它列印它的描述,這是Any可以做到的。
當您要求它下標時,Any不能這樣做,因為下標未在該型別上定義。您需要將其轉換為預期的型別:
po (notification.object as? [String])?[0]
一般來說,最好Any盡快確定任何型別。把它想象Any成一個用來通過郵件發送東西的盒子。你要做的第一件事就是打開它,看看里面有什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361225.html
