如何在Swift中更优雅地编写if和else语句
问题描述:
我在Swift中有一些脑屁,我知道这段代码可以写得更好。基本上它是什么,我有两个图像,我检查一个值是否超过3来显示图像并隐藏其他图像。 目前我有像这样如何在Swift中更优雅地编写if和else语句
let greaterThanThree = value > 3
image1.isHidden = greaterThanThree
image2.isHidden = !greaterThanThree
但我觉得有写这更优雅的方式。
答
我会写这样的:
image1.isHidden = value > 3
image2.isHidden = !image1.isHidden
什么比这更短的只是代码打高尔夫球。
答
这里似乎有一条规则,这两个视图中的某一个应始终可见。如果是的话,我会创造,为我的视图控制器的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视频中推荐了将状态规则移到附加到视图控制器的实用程序结构中的技术,从那以后我就开始大量使用它。
如果你有更多的交替视图对,只需建立和维护更多的结构实例。
(如果我认为规则是不太现实的规则,使结构是确实表达真正的规则)
答
你可以这样做:
(image1.isHidden, image2.isHidden) = (value > 3) ? (true, false) : (false, true)
基本上,如果值大于3,第一个图像将被隐藏,第二个图像将不会被隐藏。否则,第二个图像将被隐藏,第一个图像将不会被隐藏。
您无法改进/简化此代码。只有你可以为图像使用一个数组(有'图像[0]'和'图像[1]'),但是我只会在超过2张图像时才这样做。 – Sulthan