我正在做一个 Swift 编程书的实验,并坚持在结构本身内部构造一个结构。但是错误报告参数未包装。我如何将它的值作为参数?
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”,您将可选值“展开”为不再可选(不能为 nil)的值(aRank 和 aSuit)。
另一种方法:
if rank_para and suit_para {
deck.append(Card(rank: rank_para!, suit: suit_para!))
}
在这里,您要检查 rank_para 和 suit_para 是否为零。如果它们都不是,则调用追加并使用 !
来“展开”可选值。 !
表示如果值为 nil
则抛出运行时错误,否则,将此变量视为不能为 nil
。
关于struct - swift 如何在构造结构时使用枚举作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24109431/