相关疑难解决方法(0)

Swift枚举继承

你能在Swift中继承enum吗?关于枚举继承,应该注意哪些规则?

以下测试代码:

enum TemperatureUnit: Int {
    case Kelvin, Celcius, Farenheit
}

enum TemperatureSubunit : Temperature {  
}
Run Code Online (Sandbox Code Playgroud)

生成

error: type 'TemperatureSubunit' does not conform to protocol 'RawRepresentable'
Run Code Online (Sandbox Code Playgroud)

inheritance enums ios swift rawrepresentable

53
推荐指数
3
解决办法
3万
查看次数

我可以将枚举定义为另一个枚举案例的子集吗?

注意:这与我昨天在Stackoverflow上发布的另一个问题基本相同.但是,我认为我在那个问题中使用了一个不好的例子,这个例子并没有完全归结为我的想法.由于对原始帖子的所有回复都提到了第一个问题,我认为将新示例放在一个单独的问题中可能更好一点 - 没有重复的意图.


可以移动的模型游戏角色

让我们定义一个简单游戏中使用的方向枚举:

enum Direction {
    case up
    case down
    case left
    case right
}
Run Code Online (Sandbox Code Playgroud)

现在在游戏中我需要两种角色:

  • HorizontalMover只能左右移动的A.
  • A VerticalMover只能上下移动.

他们都可以移动所以他们都实现了

protocol Movable {
    func move(direction: Direction)
}
Run Code Online (Sandbox Code Playgroud)

那么让我们定义两个结构:

struct HorizontalMover: Movable {
    func move(direction: Direction)
    let allowedDirections: [Direction] = [.left, .right]
}

struct VerticalMover: Movable {
    func move(direction: Direction)
    let allowedDirections: [Direction] = [.up, .down]
}
Run Code Online (Sandbox Code Playgroud)

问题

...使用这种方法是我仍然可以将不允许的值传递move()函数,例如以下调用将是有效的:

let horizontalMover = HorizontalMover()
horizontalMover.move(up) …
Run Code Online (Sandbox Code Playgroud)

enums subset restriction swift

8
推荐指数
1
解决办法
2471
查看次数

是否可以将多个案例分组并表示为 Swift 中枚举中的另一个案例?

这就是我的意思。

enum Device {
    case iPhone_13Pro, iPhone_12Pro
    
    case iPadPro_129
    case iPadPro_11
}

// Hypothetical Scenario
enum Device_Group {
    case iPhones
    case iPads
}

Run Code Online (Sandbox Code Playgroud)

有没有办法按照上面的方法来表示像这样的一组特定情况(它可以是另一个枚举或同一枚举中的不同情况 - 这样我就可以执行以下操作?

// DO THIS
switch device {
   case iPhones:
        print("These are iPhones")

   case iPads:
        print("These are iPads")
}

// INSTEAD OF THIS
switch device {
   case .iPhone_13Pro, .iPhone_12Pro:
        print("These are iPhones")

   case .iPadPro_129, .iPadPro_11:
        print("These are iPads")
}

Run Code Online (Sandbox Code Playgroud)

我不知道这是否是一个奇怪的问题,但我发现在使用 switch 语句时对多个案例进行分组有一定的好处。对此有任何建议将不胜感激。提前致谢。

enums switch-statement swift

3
推荐指数
1
解决办法
741
查看次数