swift – 明确展开可选的nil不会导致崩溃

swift – 明确展开可选的nil不会导致崩溃,第1张

概述有些人以前问过这个问题,但没有接受答案. 我有一个包含UITextField的UITableViewCell. 如果我在textField外面略微点击,则该行突出显示.我想阻止这个. 为了防止它,我做以下事情: override func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> Ind 有些人以前问过这个问题,但没有接受答案.

我有一个包含UITextFIEld的UItableVIEwCell.

如果我在textFIEld外面略微点击,则该行突出显示.我想阻止这个.

为了防止它,我做以下事情:

overrIDe func tableVIEw(_ tableVIEw: UItableVIEw,willSelectRowAt indexPath: IndexPath) -> IndexPath! {        return nil    }

这完全没问题.这是我的问题.本教程的作者指出:

Note that returning nil from a method is only allowed if there is a
question mark (or exclamation point) behind the return type.

他的意思是你可以在可选的返回类型后面添加一个感叹号.为什么程序没有崩溃?在IndexPath返回类型之后放置感叹号后返回nil不会崩溃.我想 !会明确解开零并失败????

解决方法 从Swift 3开始,“Implicitly unwrapped optional”不是一个单独的类型,
但是关于常规/强选项声明的属性.
有关详细信息,请参阅 SE-0054 Abolish ImplicitlyUnwrappedOptional type.

具有IUO返回类型的函数可以返回nil,
并将返回值赋给变量使其成为常规变量
可选的:

func foo() -> Int! {    return nil}let x = foo() // Type of `x` is `Int?`print(x) // nil

只有当评估作为可选项不可能时才是值
将被强制解包(并导致运行时异常
价值为零):

let y = 1 + foo() // Fatal error: Unexpectedly found nil while unwrapPing an Optional value

在你的情况下,你的

overrIDe func tableVIEw(_ tableVIEw: UItableVIEw,willSelectRowAt indexPath: IndexPath) -> IndexPath!

方法重写UItableVIEwController方法

func tableVIEw(_ tableVIEw: UItableVIEw,willSelectRowAt indexPath: IndexPath) -> IndexPath?

并且可以返回零.除非呼叫者解开,否则这不会崩溃
价值.

备注:以上内容是解释您的代码编译的原因
和工作.一般来说,我没有看到隐含使用的充分理由
展开的可选返回类型. IUO的主要用例是
在SE-0054中说明:

The ImplicitlyUnwrappedOptional (“IUO”) type is a valuable tool for importing Objective-C APIs where the nullability of a parameter or return type is unspecifIEd. It also represents a convenIEnt mechanism for working through definite initialization problems in initializers.

总结

以上是内存溢出为你收集整理的swift – 明确展开可选的nil不会导致崩溃全部内容,希望文章能够帮你解决swift – 明确展开可选的nil不会导致崩溃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005746.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存