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

我可以更改枚举的关联值吗?

闽朝
2023-03-14
问题内容

我正在阅读Swift浏览文档,并且遇到了问题。这是代码:

enum SimpleEnum {
    case big(String)
    case small(String)
    case same(String)

    func adjust() {
        switch self {
        case let .big(name):
            name +=  "not"
        case let .small(name):
            name +=  "not"
        case let .same(name):
            name +=  "not"
        }
    }
}

该功能adjust()将无法正常工作,我想知道是否有一种方法可以更改枚举的关联值,以及如何更改?


问题答案:

最直接的问题是,let当您应该使用声明不可变变量(用声明)时,您尝试更改其值var。但是,由于您的name变量包含关联值的副本,因此,这不会解决此特定问题,但是通常这是您需要注意的。

如果要解决此问题,则需要将该adjust()函数声明为muting函数,并根据具体情况将其自身重新分配为一个新的枚举值,并具有一个由旧值和新值组成的关联值。例如:

enum SimpleEnum{
    case big(String)
    case small(String)
    case same(String)

    mutating func adjust() {
        switch self{
        case let .big(name):
            self = .big(name + "not")
        case let .small(name):
            self = .small(name + "not")
        case let .same(name):
            self = .same(name + "not")
        }
    }
}

var test = SimpleEnum.big("initial")
test.adjust()

switch test {
case let .big(name):
    print(name) // prints "initialnot"
case let .small(name):
    print(name)
case let .same(name):
    print(name)
}


 类似资料:
  • 问题内容: 我做了一个小“ Angle”枚举,以便可以使用不同的可互换角度格式进行编程: 我发现这种方法有些多余的样板代码。例如,我想添加一个计算的var,它只返回原始底层关联的float: 我试图将其更改为: 我希望它足够聪明,以至于只能解决一场比赛,所以这场冲突是可忽略的。但是没有这样的设备。编译器说它不能解决两个语句之间的冲突。 那么我在Swift枚举中还没有发现一些惯用的聪明之处吗,那么它

  • 问题内容: 以前,我将LegNo枚举定义为: 通过调用,我可以获得与每个枚举关联的值。 但是现在我决定让枚举是int -1而不是0,所以我决定使用私有构造函数进行初始化并设置其int值 现在唯一的事情就是因为我这样做,所以该方法不适用于枚举。我如何获得与int相关联的枚举?除了使用case switch语句或if-elseif-elseif之外,还有其他有效的方法吗? 我可以看到很多与从枚举获取i

  • 以前,我将LegNo枚举简单定义为: 通过调用,我能够获得与每个枚举关联的值。 现在唯一的问题是,因为我是这样做的,方法将不能用于枚举。如何获得与int关联的枚举?除了使用case switch语句或if-elseif-elseif之外,是否还有其他有效的方法来完成此操作 我可以看到很多关于从枚举中获得int值的问题,但我想要的是相反的问题。

  • 问题内容: 我使用枚举来使一些常量: OPEN值为零,但我希望它为100。可能吗? 问题答案: Java枚举不同于C或C ++枚举,它们实际上只是整数的标签。 Java枚举的实现更像类-甚至可以具有多个属性。 最大的区别是它们是 类型安全的 ,这意味着您不必担心将COLOR枚举分配给SIZE变量。 有关更多信息,请参见http://docs.oracle.com/javase/tutorial/j

  • 问题内容: 是否可以在运行时以某种方式更改枚举本身?例如使用反射。问题不是要更改枚举常量的状态。它即将更改枚举的常量集或删除任何常量。 关于以下枚举,是否可以添加颜色或删除颜色或更改其顺序? 我为什么要问? 首先,我想知道这是否可行。 但是如果是这样,是否会对使用Enum实现单例的通用方式产生影响? 我知道这个问题有点恶意。但是,即使是约书亚·布洛赫(Joshua Bloch )在谈论实现单例(1

  • 本文向大家介绍深入探究Swift枚举关联值的内存,包括了深入探究Swift枚举关联值的内存的使用技巧和注意事项,需要的朋友参考一下 这是枚举最基础的用法,但是在swift中,对枚举的功能进行了加强,也就是关联值。 关联值可以将额外信息附加到 enum case中,像下面这样子。 我们可以看到,在我们创建一个枚举值t的时候,设置他的选项为test1,同时可以关联3个Int类型的值,然后在switch