在'CardDeck'类的下面一行,看起来像这样
let card = CardSprite(value: i, withSuite: suit)
我收到错误:
Value of optional type 'Suit?' not unwrapped. Did you mean to use "!" or "?"
根据我对正在使用的构造的理解,我没想到会出现这个错误。有谁知道为什么在这个例子中枚举类型Suit被认为是可选的?我正在使用Xcode 7 beta 4。 注意:我可以按照XCode弹出的说明来解决此问题。我只是不明白为什么会这样。 XCode建议像这样显式展开
let card = CardSprite(value: i, withSuite: suit!)
由于 麦克
这是一些代码:
enum Suit: Int
{
case None=0,
Spade,
Club,
Hearts,
Diamonds
}
class CardSprite : SKSpriteNode
{
var m_value: Int
var m_suite: Suit
init(value:Int, withSuite suite: Suit)
{
m_value = value
m_suite = suite
super.init(texture:nil, color:UIColor.redColor(), size:CGSize(width:20, height:50))
}
required init?(coder aDecoder: NSCoder) {
m_value = -1
m_suite = Suit.None
super.init(coder: aDecoder)
}
}
class CardDeck
{
var cards: [CardSprite]
init ()
{
cards = [CardSprite]()
for s in 1...4{
let suit = Suit(rawValue:s)
for i in 1...13{
let card = CardSprite(value: i, withSuite: suit)
cards.append(card)
}
}
}
}
答案 0 :(得分:4)
let suit = Suit(rawValue:s)
是可选的。从原始值创建枚举始终返回可选项。但是,如果您看到无案例,则可以通过覆盖原始值初始值设定项来覆盖此行为。
enum Suit: Int
{
case None=0,
Spade,
Club,
Hearts,
Diamonds
init(rawValue: Int) {
switch rawValue {
case Suit.Spade.rawValue:
self = Suit.Spade
case Suit.Club.rawValue:
self = Suit.Club
case Suit.Hearts.rawValue:
self = Suit.Hearts
case Suit.Diamonds.rawValue:
self = Suit.Diamonds
default:
self = Suit.None
}
}
}
答案 1 :(得分:2)
不要迭代nan("")
从原始值创建SELECT Appeals.*, Users.Firstname, Users.LastName
FROM (Users INNER JOIN
Appeals
ON Appeals.SubmittedByUserID = Users.UserID
) INNER JOIN
AppealsCategories
ON Appeals.CategoryID = AppealsCategories.CatID
WHERE AppealsCategories.CatName = "CategoryA";
- 直接迭代1...4
:
像这样:
Suit
此外,转储Suits
案例,因为没有for suit in [.Spades, .Clubs, .Hearts, .Diamonds] { ... }
。另外,检查您的复数 - 所有套装应为复数 - .None
- > Suit
答案 2 :(得分:1)
我建议不要使用原始值。 尝试这样的事情:
enum Suit {
case None
case Spade(_:Int)
case Club(_:Int)
case Hearts(_:Int)
case Diamonds(_:Int)
}
func trythis(suit: Suit) {
switch (suit) {
case .Club(let value):
print("value \(value)")
case .Hearts(let value):
print("value \(value)")
case .Spade(let value):
print("value \(value)")
case .Diamonds(let value):
print("value \(value)")
case .None:
print("nothing to see here")
}
}
你可以这样调用这个函数:
trythis(.Club(4))
您可以将这些附加到您的CardSprite,以此方式确定其颜色和价值。