Ari*_*osh 14 swift swift-playground
所以我一直在做Apple Swift Book中的实验.
到目前为止,我已经能够完成所有这些了.以下是我的尝试,但我无法弄清楚如何让它工作.
添加一种方法,卡创建一整套卡片,每个组合的等级和套装卡.
// 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()
Run Code Online (Sandbox Code Playgroud)
threeOfSpades.createFullDeck()似乎不正确.Jac*_*mes 17
这是另一种方法,这次只使用你到目前为止学到的技术*
首先,我们使用之前定义的相应Rank和Suit枚举来定义可能的等级和套装.
接下来,我们让函数迭代每个套装中的每个等级,为每个套装创建一张卡片,最后返回一组卡片.
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
}
}
Run Code Online (Sandbox Code Playgroud)
(*有一个值得注意的例外,即巡演没有明确解释当时如何附加到数组)
小智 8
一个健壮的代码答案将不会在生成套牌时使用枚举中的实际值(即.Spades),例如,如果稍后将"Joker"添加到Rank枚举(枚举中的任何位置),则甲板生成函数应该仍然没有改变.
设计问题(要返回什么?,甲板生成应该是卡的功能吗?)与本教程并不真正相关,但如果要进一步构建任何严格的功能,可能会更喜欢Deck类(例如,洗牌).所以现在,只需要从Card结构中的函数返回一个数组.
下面的代码(尽可能只使用本教程中到目前为止所描述的内容)定义了Card结构中的一个函数,该函数遍历Suit和Rank枚举,无需知道任何枚举值并返回一个数组:
static func deck() -> [Card] {
var deck = [Card]()
var suitCount = 1
while let suit = Suit(rawValue: suitCount) {
var rankCount = 1
while let rank = Rank(rawValue: rankCount) {
deck.append(Card(rank: rank, suit: suit))
rankCount += 1
}
suitCount += 1
}
return deck
}
Run Code Online (Sandbox Code Playgroud)
用以下方式调用:
let deck = Card.deck()
var card3 = deck[3].simpleDescription()
Run Code Online (Sandbox Code Playgroud)
将该函数复制到Card结构中,然后尝试将值添加到枚举中.请注意以下事项:
| 归档时间: |
|
| 查看次数: |
10807 次 |
| 最近记录: |