簡體   English   中英

非可選類型可以為零嗎?

[英]Can a non-optional type be nil?

MessagesViewController,我們使用覆蓋的委托方法。 發送消息時,會按預期調用didStartSending 盡管非可選參數message為零:

override func didStartSending(_ message: MSMessage, conversation: MSConversation) {
    if message != nil { 
        logInfo("didStartSending message: \(message) conversation: \(conversation)") 
    } else { 
        logInfo("didStartSending message: \("why nil") conversation: \(conversation)") 
    }
}

日志:

"didStartSending message: why nil conversation: <MSConversation: 0x17026ca00>"

使用 po 進行調試:

(lldb) po message 
    <uninitialized>

我們也在if行得到預期的警告:

Comparing non-optional value of type MSMessage to nil always returns true

didCancelSending也是如此。

在我的理解中,根據定義不能為零的非可選,實際上如何為零。

編譯器將努力使非可選值永遠為零。 我認為您可以通過將 Objective-C 函數聲明為非空函數然后使其返回 nil 來繞過編譯器。 如果你這樣做,那么所有的可能性都沒有了。 任何事情都可能發生。

我還沒有嘗試過將非可選與 nil 進行比較是否合法; 如果合法,則允許編譯器假定比較將始終返回“false”; 所以檢查一個不應該被允許為零的非可選實際上是否為零是行不通的。

我看到你檢查了它......所以比較 non-optional 和 nil 是合法的,但編譯器假設它們永遠不會相同並警告你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM