在“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)
}
}
}
}
最佳答案
let suit = Suit(rawValue:s)
是可选的。从原始值创建枚举总是返回一个可选值。但是,鉴于您有 None 情况,您可以通过覆盖原始值初始值设定项来覆盖此行为。
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
}
}
}
关于ios - Swift 枚举被视为可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31993635/