ios - Swift 枚举被视为可选?

标签 ios xcode swift option-type

在“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/

相关文章:

swift - 使用 Locksmith 和 Swift 4 删除 token

ios - 类型 'FormBaseCell' 的值没有成员

ios - 将 json 数据存储在 TableView 中的交替单元格中

ios - swift 1.2 : fatal error: unexpectedly found nil while unwrapping an Optional value

ios - 如何从 iOS 应用程序中查找未使用的 .h 、 .m 和 xibs

ios - 应用程序传输安全已阻止明文 HTTP (http ://) resource load since it is insecure

ios - 如何在 func 中将类类型定义为参数?

ios - 更新推送证书并保持当前 App Store 应用程序正常工作 xcode 8.3.3

iphone - NSMutableArray 不更新

iphone - UIImage上的TapGestureRecgonizer在 Storyboard 设置中不起作用