gpt4 book ai didi

Swift 指针相等性始终为真

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

在 Swift 中,以下 if 语句始终为 true

if self.navigationController?.topViewController === self {
// always enters the conditional block
}

如果我这样写同样的代码

if let c = self.navigationController?.topViewController {
if c === self {
// do stuff...
}
}

它的行为符合预期。

我会假设第一个表达式尝试首先展开左侧,然后将其与 self 进行比较,但显然它没有。这是怎么回事?

最佳答案

据我所知,这取决于您检查此条件的类别。如果您导航到那里的特定 View Controller ,如果您检查此条件

self.navigationController?.topViewController === self

它总是正确的。因为你在 topViewController 中。

但是如果您创建其他类的实例并在不同的类中检查并寻找 navigationController 的 topViewController,这可能会失败,在那里它会失败。

例如, Root View Controller 是 UINavigationController -> ViewController -> NextViewController

在 ViewController.swift 中

 println(" \(self.navigationController?.topViewController === self)")
// the above line prints "true" since I'm in a topViewController
var nextVC = NextViewController()
println(" \(self.navigationController?.topViewController === nextVC)")
// the above line prints "false" since nextVC instance is not topViewController of navigation controller.

所以,重点是即使你使用

展开
if let

它也只是进入 block for self always(if(c === self){}) 。

关于Swift 指针相等性始终为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28671354/

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