当前位置: 首页 > 面试题库 >

一个枚举可以在Swift中包含另一个枚举值吗?

庄欣然
2023-03-14
问题内容

我想分享一些枚举属性。就像是:

enum State {
  case started
  case succeeded
  case failed
}

enum ActionState {
  include State // what could that be?
  case cancelled
}

class Action {
  var state: ActionState = .started

  func set(state: State) {
    self.state = state
  }

  func cancel() {
    self.state = .cancelled
  }
}

我知道了为什么ActionState不能继承State(因为状态cancelled在中没有表示形式State),但是我仍然想说“
ActionState就像具有更多选项的State,并且ActionState可以获取类型为State的输入,因为它们也属于输入ActionState”

我知道如何获得上述逻辑来复制案例ActionState并在set函数中进行切换。但我正在寻找更好的方法。

我知道枚举不能在Swift中继承,并且我已经阅读了swift-enum-
inheritance的协议答案。它没有解决“继承”或包括来自另一个枚举的案例的需要,仅解决了属性和变量


问题答案:

细节

  • swift-4,3
  • Xcode 10.2.1(10E1001),Swift 5(本文的最新修订)

enum State {
    case started, succeeded, failed
}

enum ActionState {
    case state(value: State), cancelled
}

class Action {
    var state: ActionState = .state(value: .started)
    func set(state: State) { self.state = .state(value: state) }
    func cancel() { state = .cancelled }
}

完整样本

不要忘记粘贴 解决方案代码

import Foundation

extension Action: CustomStringConvertible {
    var description: String {
        var result = "Action - "
        switch state {
            case .state(let value): result += "State.\(value)"
            case .cancelled: result += "cancelled"
        }
        return result
    }
}

let obj = Action()
print(obj)
obj.set(state: .failed)
print(obj)
obj.set(state: .succeeded)
print(obj)
obj.cancel()
print(obj)

结果

//Action - State.started
//Action - State.failed
//Action - State.succeeded
//Action - cancelled


 类似资料:
  • 问题内容: 我有3个带有常量的String数组。例如: 我想单独转让这些来枚举的,所以我将有3枚举类:,并用方法来实现。但是我不想将它们放在单独的文件中,因为我只有少量数据和相同类型的数据。在同一个有意义的java文件中将所有这些与访问方法一起使用的最佳方法是什么? 问题答案: 它们可以是三个内部类,如下所示: 然后参考他们,等等。 您也可以使用静态导入,如下所示: .. 为了使引用更短:,等等。

  • 枚举是用户定义的数据类型,由一组相关值组成。 关键字用于定义枚举数据类型。 枚举功能 Swift 4中的枚举也类似于C语言和Objective C的结构。 它在类中声明,并且通过该类的实例访问其值。 使用枚举初始化器定义初始成员值。 通过确保标准协议功能,还可以扩展其功能。 语法 使用关键字引入枚举,并将其整个定义放在一对括号中 - 例如,可以按如下方式定义星期几的枚举 - 示例代码 当使用pla

  • 枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。 Swift 的枚举类似于 Objective C 和 C 的结构,枚举的功能为: 它声明在类中,可以通过实例化类来访问它的值。 枚举也可以定义构造函数(initializers)来提供一个初始成员值;可以在原始的实现基础上扩展它们的功能。 可以遵守协议(protocols)来提供标准的功能。

  • 问题内容: 我要做什么才能完成此任务?另外,可以说我将其更改为: 我该如何使它符合Decodable? EDit 这是我的完整代码(不起作用) 最终编辑 另外,它将如何处理这样的枚举? 问题答案: 这很简单,只需使用或隐式分配的原始值即可。 被编码到并到 要么 被编码到并到 这是一个简单的示例如何使用它:

  • 我有两个枚举类,一个是外部的,另一个是内部的。 我需要将内部映射到外部,外部映射到内部。所以我做了以下工作, 因此,相同类型的映射在两种方法中重复。难道没有一种很好的方法可以用更少的代码来实现这一点吗?