我怎么能得到一个布尔在Swift中相反的价值?

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

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

Obj-C通常不会像我一样为我工作。

感叹号是在布尔的错误的一面。 你写的方式会表明布尔值可能为零。 你想!navHidden。

navHidden! 是确保这不是可选的。 !navHidden是正确的方法来做到这一点。

从苹果的书 。

试着用! 访问不存在的可选值会触发运行时错误。 在使用之前,一定要确保一个可选项包含非零值! 强迫 – 打开它的价值。

navHidden是可选的。 你明确地解开这个可选的(这意味着如果navHidden为零,你会崩溃)。 显然这里有什么不对劲。 我build议

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