我注意到一個行爲,當我檢查一個字典中的值是否爲零時,我覺得很困惑。在某個通知的通知處理程序中,我想檢查錯誤鍵的值是否爲零。雖然嘗試調試這個我試過如下:意外無檢查結果的可選值在字典中
寶用戶信息[ 「錯誤」]
▿可選 - 一些:無
(LLDB)PO USERINFO [ 「錯誤」] ==零
假
鑑於輸出的第一個命令,我預計第二返回true。任何想法?
謝謝
我注意到一個行爲,當我檢查一個字典中的值是否爲零時,我覺得很困惑。在某個通知的通知處理程序中,我想檢查錯誤鍵的值是否爲零。雖然嘗試調試這個我試過如下:意外無檢查結果的可選值在字典中
寶用戶信息[ 「錯誤」]
▿可選 - 一些:無
(LLDB)PO USERINFO [ 「錯誤」] ==零
假
鑑於輸出的第一個命令,我預計第二返回true。任何想法?
謝謝
我想我已經找到了罪魁禍首。我創建字典如下:
let userInfo = [DatabaseRestaurantNotificationPayload.infoDictionaryErrorKey:nil, DatabaseRestaurantNotificationPayload.infoDictionaryRestaurantKey:value1] as [String : Any]
不像人們可能想到這最終實際添加一個可選的錯誤鍵,以便查詢字典的errorKey返回可選(零),而不是零本身。
你知道任何可以包含任何東西,對吧?它也可以包含一個可選項。它可以包含一個爲零的可選項。
看起來這是這裏發生的事情。 userInfo [「error」]不是零,它包含一個值爲nil的可選項。這不是一回事。我會檢查你是如何創建userInfo的。
userInfo["error"]
回覆Optional<Sometype>.some(Optional<SomeOtherType>.none)
。所以userInfo
字典確實有一個值的關鍵"error"
,但該值是另一個可選,其本身是nil
。
這裏有一個代碼片段模仿結構:
let userInfo: [String: String?] = [
"something": "something else",
"another thing": "yet another thing",
"error": nil
]
print(userInfo["error"] as Any) // Optional(nil)
嘿亞歷克斯,打印時你必須把它當作任何東西嗎?我認爲它應該默認爲'nil'。 –
@AhmadF這是沒有必要的,但雨燕編譯器警告您,當您試圖強迫任何'?''到Any',這通常是一個代碼味道。你在說什麼'default'? – Alexander
我的意思是,不需要它鑄造'Any'的結果應該是「可選(無)」,但正如你所說,編譯器會拍一個警告... –
我認爲這不是零。但要確認,你能檢查'po userInfo [「error」]!'的輸出是什麼。 (強力解開) – Tushar