如何在 Swift 中获得 Bool 的相反值?

Posted

技术标签:

【中文标题】如何在 Swift 中获得 Bool 的相反值?【英文标题】:How can I get the opposite value of a Bool in Swift? 【发布时间】:2014-11-07 21:24:50 【问题描述】:

我的具体情况是我试图切换导航栏隐藏和显示。

    let navHidden = !self.navigationController?.navigationBarHidden
    self.navigationController?.setNavigationBarHidden(navHidden!, animated: true)

不像通常在 Obj-C 中那样为我工作。

【问题讨论】:

【参考方案1】:

navHidden 是可选的。并且您明确地解开该可选选项(这意味着如果 navHidden 为 nil,您会崩溃)。显然这里出了点问题。我建议

if let navController = self.navigationController 
    let navHidden = navController.navigationBarHidden
    navController.setNavigationBarHidden (!navHidden, animated:true)

【讨论】:

【参考方案2】:

感叹号在布尔值的错误一侧。您编写它的方式表明布尔值可能为零。你想要 !navHidden。

【讨论】:

谢谢!我并没有试图将其反转两次。除非我有它,否则它不会编译!在右边。这对我有用: let navHidden = self.navigationController?.navigationBarHidden self.navigationController?.setNavigationBarHidden(!navHidden!, animated: true) 啊,明白了。删除了我评论的那部分。【参考方案3】:

navHidden! 是为了确保这不是可选的。 !navHidden 是这样做的正确方法。

来自 Apple 的 book。

尝试使用!访问不存在的可选值会触发运行时错误。在使用之前,请务必确保可选项包含非零值!强制解包它的值。

【讨论】:

以上是关于如何在 Swift 中获得 Bool 的相反值?的主要内容,如果未能解决你的问题,请参考以下文章

如何绑定 Bool 值(我从服务器获得)以在 SwiftUI 中隐藏/显示警报?

Swift 核心数据更改 bool 存储

如何使用 Swift @autoclosure

在 swift assert(0) 中无法将 Int 类型的值转换为预期的参数类型 Bool

Swift 3和UserDefaults

Swift 中基本布尔值的默认值是多少?