是否有可能創建某種通用的willSet閉包來在視圖控制器中設置IBOutlets的樣式?在Swift中爲IBOutlets創建一個通用的willSet閉包
目前我使用此代碼來設置UIImageView設置後的色調。 「.primary」是我通過的UIColor擴展創建上的UIColor AA靜態變量:
@IBOutlet weak var someImageView:UIImageView! {
willSet {
newValue.tintColor = .primary
}
}
現在我有網點的一大堆,我想要的風格以同樣的方式對我來說這似乎是很多重複的代碼,特別是如果我開始應用更多的樣式,而不僅僅是設置色調,所以我想要更通用的東西。我想出了:
let tintClosure: (_ newValue: UIView?) ->() = { $0?.tintColor = .primary }
@IBOutlet weak var someImageView:UIImageView! { willSet{ tintClosure(newValue) } }
現在我必須編寫實際調色的代碼只能調用一次,並可以在willSet中調用閉包。然而,我想知道是否有更高效的方法,所以我甚至不必用(newValue)自己調用閉包,而只是給它添加tintClosure。
就像一個函數需要一個完成處理程序,並且您有一個適合其聲明的函數,並且只傳遞該函數的名稱而不是您在其中調用該函數的閉包。
東西真正看中的,如:
@IBOutlet weak var someImageView:UIImageView! { superDuperClosure(willSet) }
或
@IBOutlet weak var someImageView:UIImageView! { willSet{ crazyImplementationOfTintClosre } }
或
@IBOutlet weak var someImageView:UIImageView! { willSet.howIsThisEvenPossible }
或
@IBOutlet weak var someImageView:UIImageView! { nowWeAreTalking }
好吧,也許我只是想着頂端,我已經找到了最簡單的做法。也許我對willSet的工作原理還沒有深入的瞭解。所以親愛的Swift大師,教我如何成爲一個快速的開發人員。
更新
基於從聖保羅馬託斯我有另一個想法的第二個建議。我創建了一個包含所有圖像視圖的插座集合。然後我遍歷所有這些着色每一個與這個漂亮的一小段代碼:
@IBOutlet var imageViewsToTint: [UIImageView]! { willSet { newValue.forEach { $0.tintColor = .primary } } }
這種方法的美妙的事情是,你基本上可以像一個着色創建各種用途的出口集合,一個對於文本大小等,然後你可以將你想要的風格的視圖連接到適當的集合。
甜:)而且,如你所說,你可以涵蓋許多*風格*採用這種設計。並且生成的安裝程序在Interface Builder中也始終可見! –