Struct swift如何使用枚举作为构造结构的参数?
我正在做一个关于Swift编程书的实验,并坚持在结构本身内部构造一个结构。但报告的错误参数已展开。我如何将它的值作为参数Struct swift如何使用枚举作为构造结构的参数?,struct,enums,swift,Struct,Enums,Swift,我正在做一个关于Swift编程书的实验,并坚持在结构本身内部构造一个结构。但报告的错误参数已展开。我如何将它的值作为参数 struct Card { var rank: Rank var suit: Suit func simpleDescription() -> String { return "The \(rank.simpleDescription()) of \(suit.simpleDescription())" } fun
struct Card {
var rank: Rank
var suit: Suit
func simpleDescription() -> String {
return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
}
func FullDeck() -> Card[] {
var deck: Card[]
for i in 1...13
{
for j in 0...3
{
let rank_para = Rank.fromRaw(i)
let suit_para = Suit.fromRaw(j)
**deck.append(Card(rank: rank_para, suit : suit_para ))
//value of optional type unwrapped;did you mean to use ? or !**
}
}
return deck
}
}
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 compare(sec:Rank) -> Bool {
var first = 0
var second = 0
if self.toRaw() == 1 {
first = 1
} else {
first = self.toRaw()
}
if sec.toRaw() == 1 {
second = 1
} else {
second = self.toRaw()
}
return first > second
}
}
enum Suit: Int{
case Spades = 0
case Hearts, Diamonds, Clubs
func simpleDescription() -> String {
switch self {
case .Spades:
return "spades"
case .Hearts:
return "hearts"
case .Diamonds:
return "diamonds"
case .Clubs:
return "clubs"
}
}
}
fromRaw
方法返回一个可选值:Rank?
和Suit?
。这意味着该值可能为零。您需要检查以下各项:
if let aRank = rank_para {
if let aSuit = suit_para {
deck.append(Card(rank: aRank, suit: aSuit))
}
}
通过使用“if let”,可以将可选值“展开”为不再可选(不能为零)的值(aRank和aSuit)
另一种方法是:
在这里,您正在检查排名和西装是否为零。如果两者都不是,则使用
调用append和“unwrap”可选值代码><代码>
表示如果值为nil
将抛出运行时错误,否则,请将此变量视为不可能为nil
非常感谢您为我解释可选值及其展开。现在可以用了。:)
if rank_para and suit_para {
deck.append(Card(rank: rank_para!, suit: suit_para!))
}