Swift枚举带有多个类型

4

我正在尝试找出如何在Swift中复制我的Java Enum,我不知道这是否是正确的方法。

这是我想在Swift中编写的Java Enum:

public enum EnumDB {

    DATABASE_NAME("DataBase"),
    DATABASE_VERSION(1);

    private String name;
    private int value;

    private EnumDB(String name) {
        this.name = name;
    }

    private EnumDB(int value) {
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public int getValue() {
        return value;
    }

}

我的 Swift 代码:

enum EnumDB {

    case Name,Version

    func getName() -> String{
        switch self{
        case .Name: return "DataBase"
        }
    }

    func getNumber() -> Int{
        switch self{
        case .Version: return 1
        default: return 0
        }
    }
}

我的问题是:

  1. 创建包含不同类型的多个值类型的枚举,这样做是否正确?
  2. 不幸的是,按照这种方式,我可以在每个枚举中调用getName()和getNumber()方法,但这很糟糕,因为我希望这些方法按照枚举类型呈现。 关联值和原始值枚举没有帮助我得出结论,我想要的是编写一个枚举,其值可以包含不同的类型。

谢谢

1个回答

11

您绝对可以使用带有不同类型关联值的enum,我认为这可以满足您的需求。以下是我可能会实现您的示例的方式:

enum EnumDB {
    case Name(String)
    case Version(Int)
}

let namedDB = EnumDB.Name("databaseName")

switch namedDB {
case .Name(let name):
    println("Database name is \(name)")
case .Version(let versionNumber):
    println("Database version is \(versionNumber)")
}

1
是的,我已经尝试过了,但仍然让我为我想要防止的枚举定位一个常量。最后我得出结论,我想要的只是具有不同类型的常量。因此,我创建了不同类型的带有let作为静态变量的结构体。这是因为类目前还不支持let作为类(静态)变量。 - Jotta E
没错,听起来你根本不需要枚举。直接使用全局变量或者带有静态属性的结构体都可以。 - Nate Cook
2
是我自己的问题还是有人觉得Swift过于复杂了? - Raj Pawan Gumdal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接