gpt4 book ai didi

ios - 非可选类型可以为零吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:03:22 25 4
gpt4 key购买 nike

MessagesViewController 中,我们使用重写的委托(delegate)方法。发送消息时,didStartSending 会按预期调用。非可选参数 message 虽然是 nil:

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也是如此。

根据我的理解,根据定义不能为 nil 的非可选项怎么可能实际上为 nil。

最佳答案

编译器会努力使非可选值永远不可能为 nil。我认为您可以通过将 Objective-C 函数声明为非空然后使其返回 nil 来绕过编译器。如果你这样做,那么一切都没有了。任何事情都可能发生。

我没有尝试过将非可选值与 nil 进行比较是否合法;如果合法,则允许编译器假定比较将始终返回“false”;因此,检查一个不应该被允许为 nil 的非可选项实际上是否为 nil 是行不通的。

我看到你检查过了...所以比较 non-optional 和 nil 是合法的,但编译器假定它们永远不会相同并警告你。

关于ios - 非可选类型可以为零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39983751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com