[英]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.