2015-08-09 81 views
0

我正在完成Apple Swift之旅,并且遇到返回枚举值的麻烦。我的代码似乎运行良好,但是当我创建一副扑克牌时,相应的等级和套装不会返回,我只会得到[{(enum value), (enum value)}]返回52次。Swift Tour Card.createDeck()返回[{(枚举值),(枚举值)}]

显然当Swift第一次出现时有一个引起这个问题的错误,但是它在前一段时间用Xcode 6.3修复了,我相信(我正在运行Xcode 6.4),所以我不明白这可能是什么问题。

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

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

回答

2

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

+0

http://www.apeth.com/swiftBook/ch04.html#_why_protocols – matt