gpt4 book ai didi

带有存储字段的 Swift 枚举?

转载 作者:可可西里 更新时间:2023-10-31 23:58:18 25 4
gpt4 key购买 nike

所以,我一直在寻找这个问题的解决方案大约 2 天。我翻遍了 Swift 文档,尝试了许多不同的 google/stack overflow 搜索,然后直接随机编写代码无济于事。我认为部分问题是我不知道如何表达它……很抱歉这让人困惑,但希望我附加的代码能解决这个问题。

无论如何,我想知道是否有可能在枚举中有一个私有(private)字段,这样每个枚举值都有自己的值。我不是在询问扩展另一个类,也不是在询问相关值。不幸的是,我还没有在网上看到任何关于 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
}
}

}

最佳答案

您可以符合 RawRepresentable 并使用 (Int, Int) 作为 Self.RawValue:

enum Direction : RawRepresentable {
case left, right, up, down

var rawValue : (Int, Int) {
switch self {
case .left: return (0, -1)
case .right: return (0, 1)
case .up: return (-1, 0)
case .down: return (1, 0)
}
}

init?(rawValue: (Int, Int)) {
switch rawValue {
case (0, -1): self = .left
case (0, 1): self = .right
case (-1, 0): self = .up
case (1, 0): self = .down
case (_, _): return nil
}
}

var rowChange : Int { return self.rawValue.0 }
var colChange : Int { return self.rawValue.1 }
}

然后你可以像这样使用它:

print(Direction.left.rawValue) // --> (0, -1)
print(Direction.left.rowChange) // --> 0
print(Direction.left.colChange) // --> -1

关于带有存储字段的 Swift 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56418937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com