需要帮助将布尔重写为三元运算符

时间:2018-09-19 05:55:24

标签: ios swift

我正在尝试为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

这正在进入我看不见的视图,并且我正试图转换它。

2 个答案:

答案 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
    }

}

只是使更改布尔值变得更加直观。