在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 truedidCancelSending也是如此。
根据我的理解,一个不能被定义为零的非可选的东西,怎么可能是零呢?
发布于 2016-10-18 14:14:24
编译器将努力使非可选值永远为零是不可能的。我认为,您可以通过将Objective函数声明为非nil,然后使其返回零来绕过编译器。如果你这样做,那么所有的机会都会消失。任何事都有可能发生。
我没有尝试过将非可选性和零进行比较是否合法;如果它是合法的,那么编译器就可以假设比较总是返回"false";所以检查一个不应该被允许为零的非可选的值实际上是零还是不允许的,都是无效的。
我看你查过了..。因此,比较非可选和零是合法的,但编译器假设它们将永远不会相同,并警告您。
https://stackoverflow.com/questions/39983751
复制相似问题