一尘不染

向Card添加一种方法,以创建一副完整的扑克牌,每种级别和花色组合都包含一张

swift

所以我一直在做Apple Swift Book中的实验。

除了到目前为止,我已经能够完成所有这些操作。下面是我尝试过的方法,但是我不知道如何使它工作。

Card 添加一种方法,以创建一副完整的纸牌,其中每个等级和花色组合都有一张纸牌。

// Playground - noun: a place where people can play

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

enum Suit {
    case Spades, Hearts, Diamonds, Clubs

    func simpleDescription() -> String {
        switch self {
            case .Spades:
                return "spades"
            case .Hearts:
                return "hearts"
            case .Diamonds:
                return "diamonds"
            case .Clubs:
                return "clubs"
        }
    }
}

struct Card {
    var rank: Rank
    var suit: Suit

    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }

    func createFullDeck() -> Array{
        var FullDeck: Array

        FullDeck = Card(rank: .Ace, suit: .Spades)
        FullDeck = Card(rank: .Two, suit: .Spades)

        return FullDeck
    }
}

let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription()

threeOfSpades.createFullDeck()
  • 我不知道我应该为那个方法返回什么,一个数组?
  • 我应该使用for循环来创建它吗?还是有一个适当/容易的方法来用枚举做到这一点
  • 我为什么要在 Card中 创建此方法,调用threeOfSpades.createFullDeck()似乎不正确。

阅读 523

收藏
2020-07-07

共1个答案

一尘不染

这是另一种实现方式,这一次仅使用您到目前为止所学的技术*

首先,我们使用先前定义的枚举RankSuit枚举定义可能的等级和花色。

接下来,我们具有对每个西装中的每个等级进行迭代的功能,为每个西装创建一张卡片,最后返回一系列卡片。

struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }

    func createDeck() -> [Card] {
        let ranks = [Rank.ace, Rank.two, Rank.three, Rank.four, Rank.five, Rank.six, Rank.seven, Rank.eight, Rank.nine, Rank.ten, Rank.jack, Rank.queen, Rank.king]
        let suits = [Suit.spades, Suit.hearts, Suit.diamonds, Suit.clubs]
        var deck = [Card]()
        for suit in suits {
            for rank in ranks {
                deck.append(Card(rank: rank, suit: suit))
            }
        }
        return deck
    }
}

(*值得注意的例外是,导览当时没有明确说明如何附加到数组)

2020-07-07