【发布时间】:2014-07-17 11:22:41
【问题描述】:
例如,我们有如下 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 Job {
var salary: Int{
switch self{
case NINJA:
return 3000000
case SAMURAI:
return 4000000
}
}
case NINJA
case SAMURAI
}
那么,如果你是我,在这种情况下你会如何编写你的 Swift 代码呢?
【问题讨论】:
-
你的意思是不能给Store类添加attack()方法?
-
不仅要定义“攻击”方法,我还要定义每个属性值接近自己的枚举元素定义。
-
我已经更新了代码,现在它展示了如何覆盖自定义成员的方法。
-
@MitsuakiIshimoto 严肃的问题:为什么
Samurai的报酬比Ninja高?