java - 如何像 Java 一样在 Swift 中使用构造函数实现枚举?

标签 java swift

例如,我们有如下Java代码;

enum Job {
    NINJA(3000000){
        public void attack() {
            //use Shuriken
        }
    },
    SAMURAI(4000000){
        public void attack() {
            //use Sword
        }
    };
    public final int salary;
    public abstract void attack();
    private Job(int salary) {
        this.salary = salary;
    }
}

在 Swift 中,我不认为我们可以定义构造函数并拥有任何枚举方法。

我发现我们可以在下面的 Swift 代码中有类似的结构,但不能有任何方法。

class Job {
    class Store {
        let salary : Int
        init(int salary) {
            self.salary = salary
        }
    }
    class var NINJA: Store{
        return Store(3000000)
    }
    class var SAMURAI: Store{
        return Store(4000000)
    }
}
// Job.NINJA.salary

当然,我知道 Swift enum 可以有自己的属性。

但是如果你在下面的例子中有更多的属性,我们必须在每个属性上有这么多的开关。我认为这并不聪明。

enum Job {
    var salary: Int{
        switch self{
        case NINJA:
            return 3000000
        case SAMURAI:
            return 4000000
        }
    }
    case NINJA
    case SAMURAI
}

那么,如果您是我,在这种情况下您将如何编写 Swift 代码?

最佳答案

在 swift 中使用 struct 的例子:

struct MyEnum {

    static let TYPE1 = MyEnum(id: 1, text: "type 1")
    static let TYPE2 = MyEnum(id: 2, text: "type 2")

    let id: Int
    let text : String

    init(id:Int, text:String) {
        self.id = id
        self.text = text
    }

    func getId()->Int {
        return id;
    }

    func getText() ->String {
        return text;
    }

    static func values()->Array<MyEnum> {
        return [TYPE1,TYPE2]
    }

}

func == (left: MyEnum, right: MyEnum) -> Bool {
    return left.id == right.id
}

使用示例:

for e in MyEnum.values() {
    println(String(e.getId()) + " " + e.getText())
}

let type1 = MyEnum.TYPE1
if (type1==MyEnum.TYPE1) {
    println("is Type 1")
} else {
    println("is not Type 1")
}

控制台输出

1 type 1
2 type 2
is Type 1

关于java - 如何像 Java 一样在 Swift 中使用构造函数实现枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802171/

相关文章:

swift - 我正在尝试使用调度背景在 Collection View 中使用本地标识符来获取 Assets ,但加载需要太多时间并且单元格为空

java - 如何将 2D 网格缩放到 Canvas 的大小?

java - Spring JMX - 将包中的类注册为 MBean

swift - UIPageViewControllers UIPageControl 在转换过程中出现故障

swift - cellForNextPageAtIndexPath 在 swift2 中不可见

ios - Firebase 查询不起作用

java - 读取代理java背后的https网页数据

java - 删除工具栏副标题

java - 是否可以将多个pdf页面合并为一张pdf并以java打印?

swift - 移动 subview - 偏移量错误,但视觉上正确?