雨燕的编程语言枚举实验(The Swift Programming Language Enumera

2019-10-20 06:24发布

我正在做我的方式,通过雨燕编程语言的书,但我卡在一个实验。

我给出这样的代码:

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
}

但是,我结束了错误,因为我不知道如何通过枚举值。

有人能帮忙吗?

Answer 1:

枚举值可以被传递,就像其他类型。 下面的函数是的一部分Rank枚举和一个比较Rank到另一个。

func compareToOther(other:Rank) -> Bool {    // other is of type Rank 
        return self.toRaw() == other.toRaw()
}

下面是快速实现和使用的屏幕截图。



Answer 2:

您可以通过刚好路过枚举名传递枚举:

// someRank is a Rank enum value
func myFunction (someRank: Rank) -> () {

}

然后你就可以叫它:

myFunction(Rank.Ace)


Answer 3:

我也是个初学者,但是这是我的工作是如何在整个实验过程。 首先我说这一点;

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)

有人有更多的经验可以请回复,如果存在执行比较的更好/更优雅的方式?



Answer 4:

我解决了它是这样的:

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()用于写出你的答案。



Answer 5:

此代码可以被用来确定两个枚举值相等或没有。 .toRaw()是过时,所以.rawValue必须被用于获得用于比较的原始值。 此功能的编辑版本(以便与字符串类型的信息全面的比较,而不是“真”或“假”)应该用于完成练习。 提示对于编辑:此功能为BOOL类型。

func compareRanks(rankA: Rank, rankB: Rank) -> Bool {
        return rankA.rawValue == rankB.rawValue
}

一看就知道做出这个答案可能的代码和贡献者,请参阅问题: 雨燕编程语言枚举实验的说明



文章来源: The Swift Programming Language Enumerations Experiment