所以,我已经花了大约2天的时间寻找这个问题的解决方案。我翻阅了Swift文档,尝试了许多不同的谷歌/堆栈溢出搜索,甚至随意编写代码,但都没有成功。我想问题的一部分是我不知道该如何表达它...所以如果这很困惑,对不起,但希望我附加的代码能够澄清它。
无论如何,我想知道是否可能在枚举中有一个私有字段,使得每个枚举值都有自己的该字段值。我不是在问如何扩展另一个类,并且我也不是在问关联值。不幸的是,我还没有找到任何在线信息说明Swift是否允许这样做,因此也不知道如何实现。为了强调我的问题,我正试图在Swift中重新创建以下Java代码:
无论如何,我想知道是否可能在枚举中有一个私有字段,使得每个枚举值都有自己的该字段值。我不是在问如何扩展另一个类,并且我也不是在问关联值。不幸的是,我还没有找到任何在线信息说明Swift是否允许这样做,因此也不知道如何实现。为了强调我的问题,我正试图在Swift中重新创建以下Java代码:
// Java
public enum Direction {
LEFT(0, -1), RIGHT(0, 1), UP(-1, 0), DOWN(1, 0);
private final int rowChange, colChange;
Direction(int rowChange, int colChange) {
this.rowChange = rowChange;
this.colChange = colChange;
}
public int rowChange() {
return this.rowChange;
}
public int colChange() {
return this.colChange;
}
}
目前我已经有这个,它可以正常工作,但我更希望它具备存储值的功能,而不是通过每种可能情况进行切换。
// Swift
public enum Direction {
case left, right, up, down
public func rowChange() -> Int {
switch self {
case .left:
return 0
case .right:
return 0
case .up:
return -1
case .down:
return 1
}
}
public func colChange() -> Int {
switch self {
case .left:
return -1
case .right:
return 1
case .up:
return 0
case .down:
return 0
}
}
}
var column: Int { ... }
而不是func colChange() -> Int { ... }
。由于这是一个 O(1) 操作,在 Swift 中编写它的事实标准方式是使用属性,而不是函数。 - Claus Jørgensen