gpt4 book ai didi

ios - someConstant?.isKindOfClass(SomeClassType) 的计算结果总是为真

转载 作者:行者123 更新时间:2023-11-28 10:26:26 26 4
gpt4 key购买 nike

我有以下代码来根据 rvc 的类型确定不同的操作:

 let rvc = UIApplication.sharedApplication().delegate.window?.rootViewController
if rvc?.isKindOfClass(UINavigationController)
{
push the view controller
}
else
{
present the view controller
}

但是,当我使用 Storyboard执行此操作时,初始 View Controller 不是 UINavigationController,只是 UIViewController 的后代,然后执行 if 语句的第一个分支。

更新:问题实际上出在语法上,因为在下面的代码中,每个 if 语句的计算结果都是 true:

if rvc?.isKindOfClass(UIViewController)
{
println("UIViewController")
}
if rvc?.isKindOfClass(UINavigationController)
{
println("nav controller")
}
if rvc?.isKindOfClass(NSNotification)
{
println("should not get here")
}
if rvc?.isKindOfClass(put whatever you want here)
{
println("should not get here")
}

因此,rvc?.isKindOfClass 的语法/语义一定有问题,但它有什么不正确之处?

最佳答案

作为 Grimxn 回答的附录(以及对 if rvc?.isKindOfClass(xxxAnyClassxx) {if rvc!.isKindOfClass(...) 之间区别的问题的回应{):

当您使用 ?.method(即选项链接)时,该方法的结果被封装在一个 Optional 中。这就是重点;选项链的最终结果将是 .Some(链中最后一个方法的结果)nil 如果链中的任何点导致

如果 Optional 包含某些内容,则在 if 语句中测试 Optional 的逻辑值将返回 true (即,它的值为 .Some(...)),如果它是 nil,则为 false——它不查看Optional 中的值是。在这种情况下,它是您实际要检查的包含值。

关于ios - someConstant?.isKindOfClass(SomeClassType) 的计算结果总是为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24703156/

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