2015-12-21 40 views
0

我在夫特定義了以下協議:Swift屬性 - 避免對n類進行多重聲明?

protocol Condition { 

var column : RepositoryTableColumn! {get set} 
var sourceTable : RepositoryTable! {get set} 
var conditionalValue : String! {get set} 
var preventsClear : Bool! {get set} 

func getCondition() -> String 
func accept(visitor : ConditionVisitor) 

}

和協議是由擴展(現在上)8級的類意味着每個類都需要有一個聲明爲:

class IsEqual : Condition { 

var column : RepositoryTableColumn! 
var sourceTable : RepositoryTable! 
var conditionalValue : String! 
var preventsClear : Bool! 

} 

我的問題是,怎麼可能避免在每個班級中有這四個聲明?我試圖避免這種情況的原因是我不想複製代碼,即在這種情況下聲明。

對於構造函數,我創建了Condition類的擴展,但這不能暗示屬性,因爲擴展不能容納它們。

任何建議?

回答

0

如果你的屬性可以被計算而不是存儲,你可以創建一個extensionCondition,它爲採用你的協議的任何東西提供默認實現。不幸的是,您無法將存儲的屬性添加到擴展中的類中,因此如果簡短對您來說很重要,您可能必須重新構建模型。