У меня есть перечисление CompassDirection
, которое я обычно определяю в Java следующим образом:
enum CompassDirection {
N(0, 1), S(0, -1), E(1, 0), W(-1, 0), NE(1, 1), NW(-1, 1), SE(1, -1), SW(-1, -1)
...
Где конструктор ожидает целочисленные свойства alterX
и alterY
, сохраняет их и использует в методе alter(Position position)
следующим образом:
public Position alter(Position pos) {
return new Position(pos.x + this.alterX, pos.y + this.alterY);
}
Моя цель — сделать что-то подобное в Swift. Я могу легко добавить оператор switch
из 8 случаев в свой метод alter()
, но это приводит к увеличению количества кода и путаницы.
Это то, что я пробовал в Swift:
enum CompassDirection {
case N(0, 1), S(0, -1), E(1, 0), W(-1, 0), NE(1, 1), NW(-1, 1), SE(1, -1), SW(-1, -1)
private let xAlter : Int
private let yAlter : Int
private init(_ xAlter: Int, _ yAlter: Int) {
self.xAlter = xAlter
self.yAlter = yAlter
}
func alter(position: XYPosition) -> XYPosition {
return XYPosition(x: position.x + self.xAlter, y: position.y + self.yAlter)
}
}
Но Swift не поддерживает хранимые свойства в перечислениях.
Какое наиболее читаемое/быстрое решение для преобразования приведенного выше перечисления Java в перечисление Swift?
alter
, где мы должны выполнять переключатель каждый раз, когда вызываетсяalter
. 21.10.2016alter()
в моем вопросе.) Поскольку Swift не поддерживает хранимые свойства в перечислениях, единственным маршрутом является переключатель. 21.10.2016