首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非可选类型可以是零吗?

非可选类型可以是零吗?
EN

Stack Overflow用户
提问于 2016-10-11 18:04:21
回答 1查看 817关注 0票数 2

MessagesViewController,中,我们使用重写的委托方法。在发送消息时,将按预期调用didStartSending。但是,非可选参数message为零:

代码语言:javascript
复制
override func didStartSending(_ message: MSMessage, conversation: MSConversation) {
    if message != nil { 
        logInfo("didStartSending message: \(message) conversation: \(conversation)") 
    } else { 
        logInfo("didStartSending message: \("why nil") conversation: \(conversation)") 
    }
}

日志:

代码语言:javascript
复制
"didStartSending message: why nil conversation: <MSConversation: 0x17026ca00>"

使用po进行调试:

代码语言:javascript
复制
(lldb) po message 
    <uninitialized>

此外,我们还在if行上得到了预期的警告:

代码语言:javascript
复制
Comparing non-optional value of type MSMessage to nil always returns true

didCancelSending也是如此。

根据我的理解,一个不能被定义为零的非可选的东西,怎么可能是零呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 14:14:24

编译器将努力使非可选值永远为零是不可能的。我认为,您可以通过将Objective函数声明为非nil,然后使其返回零来绕过编译器。如果你这样做,那么所有的机会都会消失。任何事都有可能发生。

我没有尝试过将非可选性和零进行比较是否合法;如果它是合法的,那么编译器就可以假设比较总是返回"false";所以检查一个不应该被允许为零的非可选的值实际上是零还是不允许的,都是无效的。

我看你查过了..。因此,比较非可选和零是合法的,但编译器假设它们将永远不会相同,并警告您。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39983751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档