如何在Swift中更优雅地编写if和else语句

时间:2017-04-01 18:55:50

标签: swift

我在Swift中有一点脑屁,我知道这段代码可以写得更好。基本上它是什么,我有两个图像,我检查一个值是否超过3来显示图像并隐藏另一个。 目前我喜欢这个

let greaterThanThree = value > 3 
image1.isHidden = greaterThanThree
image2.isHidden = !greaterThanThree

但我觉得有更优雅的方式来写这个。

3 个答案:

答案 0 :(得分:1)

我这样写:

image1.isHidden = value > 3 
image2.isHidden = !image1.isHidden

任何短于此的东西都只是打高尔夫球。

答案 1 :(得分:1)

这里似乎有一条规则,这两个视图中的一个应该始终可见。如果是这样,我将在视图控制器的viewDidLoad中创建此结构的一个实例:

struct AlternateViews {
    let views : [UIView]
    init(_ v1:UIView, _ v2:UIView) {
        views = [v1,v2]
    }
    func hide(first:Bool) {
        views[0].isHidden = first
        views[1].isHidden = !first
    }
}
let alternateViews = AlternateViews(image1, image2)

好的,这是最初设置的很多工作,但结果是以后你可以说

self.alternateViews.hide(first: value > 3)

结构体充当微型状态机,确保视图控制器的视图保持一致状态。在WWDC 2016视频中推荐了将状态规则移动到视图控制器附带的实用程序结构中的技术,从那时起我就开始大量使用它。

如果你有更多的交替视图对,只需制作和维护更多的结构实例。

(如果我假设的规则不是真正的规则,那么建立 表达真实规则的结构。)

答案 2 :(得分:0)

你可以这样做:

(image1.isHidden, image2.isHidden) = (value > 3) ? (true, false) : (false, true)

基本上,如果该值大于3,则第一个图像将被隐藏,第二个图像将被取消。否则,第二个图像将被隐藏,第一个图像将不会被隐藏。