我正在尝试为if语句编写更多的三元运算符,但我一直坚持将其转换为三元运算符,并且需要一些帮助。
我正在尝试设置淡入和淡出状态,导航栏,工具栏和文本滑块的动画。
我有:
var isHidden = false
@objc func textViewTapped(_ sender: UIGestureRecognizer) {
navigationController!.setNavigationBarHidden(!isHidden, animated: false)
isHidden = navigationController!.isNavigationBarHidden
UIView.animate(withDuration: 0.5, animations: {
self.toolbar.isHidden = self.toolbar.isHidden ? false : true
self.textSlider.isHidden = self.textSlider.isHidden ? false : true
self.setNeedsStatusBarAppearanceUpdate()
}, completion: nil)
}
如您所见,我得到了工具栏和textSlider作为三元运算符。我需要转换此位的帮助:
navigationController!.setNavigationBarHidden(!isHidden, animated: false)
isHidden = navigationController!.isNavigationBarHidden
这正在进入我看不见的视图,并且我正试图转换它。
答案 0 :(得分:5)
您无需在此处使用三元运算符,只需编写一下就可以了:
UIView.animate(withDuration: 0.5, animations: {
self.toolbar.isHidden = !self.toolbar.isHidden
self.textSlider.isHidden = !self.textSlider.isHidden
self.setNeedsStatusBarAppearanceUpdate()
}, completion: nil)
但是我想您正在练习使用三元运算符,但是请注意,在某些情况下三元运算符根本没有用。并非每个if语句都可以转换为一个。例如这个:
if someCondition {
someAction1()
someAction2()
} else {
someActon3()
someAction4()
}
您不能将两个语句作为三元运算符的操作数之一。
对于上述两行,您可以遵循与上述几行相同的逻辑:
navigationController!.setNavigationBarHidden(isHidden ? false : true, animated: false)
isHidden = isHidden ? false : true // this is really redundant...
三元运算符的一个更合适的用例是,您希望根据条件使用非{Bool
类型的不同值。例如:
label.text = isHidden ? "I am hidden!" : "I am visible!"
答案 1 :(得分:0)
Swift 4.2 / Xcode 10提供了布尔.toggle()功能。或者,您也可以为较早的版本推出自己的版本:
extension Bool {
mutating func toggle() {
self = !self
}
}
只是使更改布尔值变得更加直观。