具有多种类型的Swift枚举

具有多种类型的Swift枚举,swift,Swift,我正试图找出如何将我的Java枚举复制到Swift中,我不知道 这是正确的方法 我正在尝试用Swift编写的Java枚举: public enum EnumDB { DATABASE_NAME("DataBase"), DATABASE_VERSION(1); private String name; private int value; private EnumDB(String name) { this.name = name;

我正试图找出如何将我的Java枚举复制到Swift中,我不知道 这是正确的方法

我正在尝试用Swift编写的Java枚举:

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
        }
    }
}
我的问题是:

  • 这是创建具有多个值类型的枚举的正确方法吗 另一种类型
  • 不幸的是,通过这种方式,我可以在每个枚举上调用getName()和getNumber()方法,这是错误的,因为我希望这些方法根据枚举类型显示。 枚举关联值和原始值没有帮助 最后,我要寻找的是编写一个枚举,他的值可以包含不同的类型

  • 谢谢

    您肯定可以拥有一个带有不同类型关联值的
    枚举
    ,我认为它可以满足您的需求。以下是我如何实现您的示例:

    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)")
    }
    

    是的,我已经试过了,但是它仍然让我找到了一个常量,我正试图阻止它。最后我得出结论,我想要的只是不同类型的常量。因此,我创建了不同类型的结构,将let作为静态的。这是因为类还不支持let-as类(静态)。对,听起来根本不需要枚举。无论是一个直接的全局变量还是一个具有静态属性的结构都可以。是我还是有人觉得Swift不必要地复杂?