Swift Tour Card.createDeck()返回[{(枚举值),(枚举值)}] [英] Swift Tour Card.createDeck() Returning [{(enum value), (enum value)}]

查看:239
本文介绍了Swift Tour Card.createDeck()返回[{(枚举值),(枚举值)}]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在完成Apple Swift游览,并且遇到返回枚举值的麻烦。我的代码似乎运行正常,但是当我创建一张卡片时,相应的等级和套装不会返回,我只需要得到 [{(枚举值),(枚举值)}] code>返回52次。

I am completing the Apple Swift tour, and am running into trouble with return enum values. My code seems to be running fine, but when I create a deck of cards, the appropriate rank and suit are not returned, I just get [{(enum value), (enum value)}] returned 52 times.

显然,Swift第一次出现时出现了一个错误,但是Xcode 6.3之前已经修复了, (我正在运行Xcode 6.4),所以我看不出这可能是什么问题。

Apparently there was a bug causing this when Swift first came out, but it was fixed a while ago with Xcode 6.3 I believe, (I am running Xcode 6.4), so I don't see how that could be the issue.

我已经能够在某些情况下通过使用 .simpleDescription 返回实际的字符串,但在这种情况下似乎无法使其工作。

I've been able to resolve the problem in some circumstances by using .simpleDescription to return the actual string but I can't seem to get that to work in this instance.

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.rawValue)
        }
    }
}

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"
        }
    }
    static func color(suitName: Suit) -> String {
        if(suitName.simpleDescription() == "spades" || suitName.simpleDescription() == "clubs") {
            return "Black"
        } else {
            return "Red"
        }
    }
}

struct Card {
    var rank: Rank
    var suit: Suit
    func simpleDescription() -> String {
        return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
    }
    static 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))
            }
        }
        println(deck)
        return deck
    }
}
let threeOfSpades = Card(rank: .Three, suit: .Spades)
let threeOfSpadesDescription = threeOfSpades.simpleDescription() // This code returns the card properly

Card.createDeck()


推荐答案

这就是这样。 println 不显示枚举值。实现可打印(和描述),或更新到Swift 2.0,修复它。

That's just the way it is. println doesn't show enum values. Implement Printable (and description), or update to Swift 2.0, which fixes it.

这篇关于Swift Tour Card.createDeck()返回[{(枚举值),(枚举值)}]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆