繁体   English   中英

从 Swift 中的枚举中返回一个随机案例

[英]Return a random case from an enum in Swift

我刚刚写了一个 function 生成一个随机 integer 在 0...2 的范围内。 目标是从基于随机 integer 的枚举中返回一个随机案例。

我更喜欢使用 case 语句,但我不喜欢返回任意枚举的默认 case。 省略默认情况将不起作用,因为 switch 无法知道会发生多少情况。 即使默认情况永远不会发生,我也不认为这是一个干净的解决方案。

您更喜欢哪个解决方案分别认为是最干净的解决方案 - 请详细说明。 有没有更好/更优雅的方式从枚举中返回随机案例?

If-else 解决方案:

    func generateRandomSign() -> Sign {
        let randomSelection = Int.random(in: 0...2)

        if randomSelection == 0 {
            return .rock
        } else if randomSelection == 1 {
            return .paper
        }
        return .scissor
    }

开关解决方案:

    func generateRandomSign() -> Sign {
        let randomSelection = Int.random(in: 0...2)

        switch randomSelection {
        case 0: return .rock
        case 1: return .paper
        case 2: return .scissor
        default: return .rock
        }
    }

没有必要搞乱Int s。 您应该声明您的Sign enum以符合CaseIterable并在其allCases属性上调用randomElement() (顾名思义,它包含enum的所有情况)。

这样您就不会牺牲类型安全,并且保证每次都能取回一个Sign案例。

enum Sign: CaseIterable {
    case rock
    case paper
    case scissor

    static func random() -> Sign {
        return allCases.randomElement()! // safe to force unwrap, since the enum has at least 1 property, so this can never be `nil`
    }
}

你可以这样称呼它let randomSign = Sign.random()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM