我有許多類都具有borderColor
屬性。我可以在故事板中的用戶定義屬性中設置此屬性,然後使用一個單獨的UIView
擴展名來實際添加邊框和它的顏色。很棒。在Swift中消除重複的「用戶定義運行時屬性」代碼
但是我對每個子類申報「BORDERCOLOR」屬性。協議擴展和擴展都不允許我聲明這種計算屬性,所以我可以在我的所有子類中使用它。
我有很多其他類和許多其他屬性,如borderWidth
,shadowColor
等,所以它最終是一個大量的重複代碼。
並且每個子類都需要繼承特定的超類,即UIImageView
,而不僅僅是UIView
,因爲在下面的示例中還有其他方法未詳細說明。所以我不能將這些添加到一些UIView
子類中,然後讓所有這些類繼承它。
,我怎麼可能會降低所有我的項目中重複的屬性有什麼想法?
謝謝!
class BDRImageView: UIImageView {
var borderColor: UIColor? {
willSet {
if let color = newValue {
addBorder(color: color)
}
}
}
}
class BDRLabel: UILabel {
var borderColor: UIColor? {
willSet {
if let color = newValue {
addBorder(color: color)
}
}
}
}
class BDRButton: UIButton {
var borderColor: UIColor? {
willSet {
if let color = newValue {
addBorder(color: color)
}
}
}
}
//and so on...
extension UIView {
func addBorder(color: UIColor) {
//does add border stuff...
}
}
這是一個偉大的答案,我不知道我還可以使用'GET'和'set'在協議擴展中,即使我不能使用'willSet'。但是,當我將屬性移動到擴展時,它通過故事板中用戶定義的運行時屬性設置屬性時永遠不會被調用。 – Frankie
嗯,我從來沒有嘗試過。我不太清楚故事板運行時屬性背景中發生的情況。這很有趣,我想看看它:)也許我可以稍後@Frankie回來一些有用的信息 –