I'd say enums, but IMHO they should be more ergonomic, e.g.:
enum E {
...
case a(x: Int, Int)
}
var e = E.a(x: 1, 2)
let v = e.a // this is of type `(x: Int, Int)!`
e.a.x = 100 // change associated value field by name
e.a.1 = 200 // change associated value field by index
if let v = e.a { // optional binding
v.0 ...
v.y ...
}
let isA = e.a != nil