gpt4 book ai didi

swift - 为什么在这种情况下非可选函数可以返回 nil?

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:44 26 4
gpt4 key购买 nike

我正在 Playground 中尝试以下代码,我不太明白为什么编译器在 bar 时没有给出错误。 ,即 nil , 从非可选函数返回;以及为什么它在本质上是nil正在与 nil 进行比较并在声称 foobar 时给出一条错误消息,该消息似乎不正确永远不可能是nil .

编辑:自 Optional也是Any , 为什么要返回 nil直接如foo2不允许?

func foo() -> Any {
let bar: String? = nil
return bar
}

let foobar = foo()

if foobar == nil {

}

func foo2() -> Any {
return nil
}

enter image description here

最佳答案

EDIT: Since Optional is also Any, why returning nil directly as in foo2 is not allowed?

因为 nil 没有自己的类型。它说什么都没有,但是什么什么都没有?你必须选择那个类型:

func foo2() -> Any {
return nil as String?
}

即使这样也是合法的:

func foo2() -> Any {
return nil as Any?
}

但是永远,永远不要这样做。 Any 不是普通工具。它是类型系统处理非常特殊问题(如 print)的最后一道防线。当您将 Any 的魔力与 Optional 的魔力(特别是 Optional-promotion)混合使用时,您会经常遇到令人困惑的错误并发现自己运行了错误的重载。

AnyObject 确实出现了一点,但这只是因为 ObjC 的桥梁,它大量使用无类型值(尽管这正在改进并且 AnyObject 变得不那么常见) .但是在 Swift 代码中返回 AnyObject 仍然很少有意义。

关于swift - 为什么在这种情况下非可选函数可以返回 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017969/

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