如何创建枚举可选实例

时间:2016-07-11 10:45:44

标签: swift

我正在从“The Swift Programming Language(Swift 3 beta)”中学习Swift 3。下面是他们的枚举示例。在本示例的最后,他们编写了“使用init?(rawvalue:)从原始值创建枚举实例”。任何人都可以告诉我,如何做到这一点。感谢。

enum Rank: Int {

    case ace = 1 // Raw value
    case two, three, four , five , six, seven, eight, nine, ten
    case jack, queen, king

init?(rawValue: Int) {

    self = rawValue == 1 ? .ace : .jack
}

    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.rawValue)
        }

    }
}

4 个答案:

答案 0 :(得分:2)

正如你在这里看到的那样:

enum Rank: Int

"你的" Rank枚举原始值必须为Int类型。

因此,要创建具有Rank值的新ace元素,您可以写:

let ace = Rank(rawValue: 1)

要创建女王,你会写:

let queen = Rank(rawValue: 12)

另请注意,Rank init返回一个可选项。这意味着如果您为其指定了无效的Int值,则会获得nil作为回报。

例如:

let notValid = Rank(rawValue: 100) //gives you nil in return

希望对你有所帮助。

答案 1 :(得分:1)

您可以为枚举创建一个可选的init,如下所示:

init?(rawValue: String) {
    if rawValue == "ace" {
        self = .ace
    } else {
        return nil
    }
}

else处理term中的无效/意外值(这就是为什么init是可选的初始化器 - 如果给出无效输入,它可能返回nil)。希望这有帮助!

答案 2 :(得分:1)

使用init?(rawvalue:)初始化程序:

let enumValue1 = Rank(rawValue: 100)
print(enumValue1) 
// will print nil because raw value is too big

let enumValue2 = Rank(rawValue: 6)
print(enumValue) 
// will print `Optional(ACNotificationsDemo.Rank.six)`

答案 3 :(得分:0)

enum OptionalValues<T>{
   case None
   case Some(T)
}
var possibleInteger:
OptionalValue<Int>=.None
possibleInteger = .Some(100)