Компилируется следующий код Swift:
enum GraphDataSource {
case array(data: [Double], start: Double?, step: Double?)
case pairs(XYValues: [Double: Double])
case pairs(dateValues: [Date: Double])
case function((Double) -> Double?)
func localizedName() -> String {
// TODO: Create localizable strings
return NSLocalizedString(Mirror(reflecting: self).children.first?.label ?? "", comment: "")
}
}
У него есть два перечислимых случая с именем pairs
.
Но когда я пытаюсь извлечь соответствующее значение, оказывается, что я не могу выбрать тот, который хочу.
var graphData = GraphDataSource.function(sin)
switch graphData {
case .pairs(dateValues: let vals):
vals.keys.forEach({print($0)})
case .pairs(XYValues: let xy): // without this case everyting compiles OK
xy.keys.forEach({print($0)})
default:
break
}
Ошибка: «Метка элемента шаблона кортежа« XYValues »должна быть« dateValues »».
Это нормально? По ощущениям, компилятор должен либо запретить регистры с одним и тем же именем, либо разрешить включать оба.