我在Swift中有一些腦屁,我知道這段代碼可以寫得更好。基本上它是什麼,我有兩個圖像,我檢查一個值是否超過3來顯示圖像並隱藏其他圖像。 目前我有像這樣如何在Swift中更優雅地編寫if和else語句
let greaterThanThree = value > 3
image1.isHidden = greaterThanThree
image2.isHidden = !greaterThanThree
但我覺得有寫這更優雅的方式。
我在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