我正在做我的方式,通过雨燕编程语言的书,但我卡在一个实验。
我给出这样的代码:
enum Rank: Int {
case Ace = 1
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
case Jack, Queen, King
func simpleDescription() -> String {
switch self {
case .Ace:
return "Ace"
case .Jack:
return "Jack"
case .Queen:
return "Queen"
case .King:
return "King"
default:
return String(self.toRaw())
}
}
}
在实验中,我要“写通过比较它们的原始值两个等级值进行比较的功能。
我了个去:
func rankCompare(first: String, second: String) -> String {
let firstRank = Rank.first
}
但是,我结束了错误,因为我不知道如何通过枚举值。
有人能帮忙吗?
枚举值可以被传递,就像其他类型。 下面的函数是的一部分Rank
枚举和一个比较Rank
到另一个。
func compareToOther(other:Rank) -> Bool { // other is of type Rank
return self.toRaw() == other.toRaw()
}
下面是快速实现和使用的屏幕截图。
您可以通过刚好路过枚举名传递枚举:
// someRank is a Rank enum value
func myFunction (someRank: Rank) -> () {
}
然后你就可以叫它:
myFunction(Rank.Ace)
我也是个初学者,但是这是我的工作是如何在整个实验过程。 首先我说这一点;
func compareTwoCards(card1: Rank, card2: Rank) -> String {
if card1.toRaw() == card2.toRaw() {
return "Cards are equal"
} else {
if card1.toRaw() > card2.toRaw() {
return "Card1 is greater"
} else {
return "Card2 is greater"
}
} }
然后,我创建了两个等级的对象
let ace = Rank.Ace
let queen = Rank.Queen
最后,我把它叫做三种不同的方式进行测试;
compareTwoCardsTake2(ace, queen)
compareTwoCardsTake2(queen, ace)
compareTwoCardsTake2(ace, ace)
有人有更多的经验可以请回复,如果存在执行比较的更好/更优雅的方式?
我解决了它是这样的:
func rankCompare(first: Rank, second: Rank) -> String {
if(first.rawValue > second.rawValue) {
return "\(first.simpleDescription()) beats \(second.simpleDescription())."
}
else if second.rawValue > first.rawValue {
return "\(second.simpleDescription()) beats \(first.simpleDescription())."
}
else {
return "\(first.simpleDescription()) equals \(second.simpleDescription())."
}
}
let king = Rank.King
let queen = Rank.Queen
let seven = Rank.Seven
rankCompare(king, queen)
rankCompare(seven, king)
rankCompare(queen, queen)
使用.rawValue做的比较和.simpleDescription()用于写出你的答案。
此代码可以被用来确定两个枚举值相等或没有。 .toRaw()
是过时,所以.rawValue
必须被用于获得用于比较的原始值。 此功能的编辑版本(以便与字符串类型的信息全面的比较,而不是“真”或“假”)应该用于完成练习。 提示对于编辑:此功能为BOOL类型。
func compareRanks(rankA: Rank, rankB: Rank) -> Bool {
return rankA.rawValue == rankB.rawValue
}
一看就知道做出这个答案可能的代码和贡献者,请参阅问题: 雨燕编程语言枚举实验的说明