我有一個遞歸枚舉,其中大多數情況下具有相同的類型相關聯的值:Swift 2:在關聯值的enum switch語句中是否有任何方法使用'default'?
indirect enum Location {
case Title(String?)
case Region(Location)
case Area(Location, Location)
case City(Location, Location)
case Settlement(Location, Location)
case Street(Location, Location)
case House(Location, Location)
}
我想要做的是形成一個很好的字符串描述,這將包括所有非空頭銜。
func getStringFromLocation(location: Location) -> String? {
var parts: [String?] = []
switch location {
case .Title(let title): return title
case .House(let title, let parent):
parts.append(getStringFromLocation(parent))
parts.append(getStringFromLocation(title))
case .Street(let title, let parent):
parts.append(getStringFromLocation(parent))
parts.append(getStringFromLocation(title))
case .Settlement(let title, let parent):
parts.append(getStringFromLocation(parent))
parts.append(getStringFromLocation(title))
case .City(let title, let parent):
parts.append(getStringFromLocation(parent))
parts.append(getStringFromLocation(title))
case .Area(let title, let parent):
parts.append(getStringFromLocation(parent))
parts.append(getStringFromLocation(title))
case .Region(let title):
parts.append(getStringFromLocation(title))
}
return parts
.filter { $0 != nil }
.map { $0! }
.joinWithSeparator(", ")
}
的問題是,五出於七個可能的情況是完全一樣的,我有一堆複製粘貼代碼,因爲我想,是不是好。如果我列舉了100個案例呢?
有什麼辦法可以寫這樣的東西嗎?
switch location {
case .Title(let title):
parts.append(title)
case .Region(let title):
parts.append(getStringFromLocation(title))
default (let title, let parent):
parts.append(getStringFromLocation(parent))
parts.append(getStringFromLocation(title))
}
...使用一些默認情況下處理所有類似的情況?
謝謝,羅布!我有你的觀點,看起來很清楚!我想嘗試使用這些遞歸枚舉,但是你和Paul說服我做我想要的並且完全同意 - 最好使用更傳統的數據結構)。非常感謝! –