使用枚举大小写并进行保护以允许进行不止一种情况的正确语法是什么?
使用switch
,我们可以使用case-item-list组合开关盒。
guard
或if
语句是否有类似内容?
这是我想做的一些代码示例...
enum Thingy {
case one
case two
case three
}
func doSomething(with value: Thingy) {
switch value {
case .one, .three:
print("I like these numbers")
default:
print("Two")
}
}
// Doesn't compile
func doSomethingAlt(with value: Thingy) {
guard .one, .three = value else {
print("Two")
return
}
print("I like these numbers")
}
您只需要提供由OR
(||
)条件分隔的条件。方法如下:
func doSomethingAlt(with value: Thingy) {
guard value == .one || value == .three else {
print("Two")
return
}
print("I like these numbers")
}
[这将要求enum
符合Equatable
。没有关联值或带有Enums
的raw-type
自动符合Equatable
。由于Swift 4.1
枚举甚至具有关联类型的情况也自动符合Equatable
。这是一些代码:
enum Thingy: Equatable {
case one(String)
case two
case three
}
func doSomethingAlt(with value: Thingy) {
guard value == .one("") || value == .three else {
print("Two")
return
}
print("I like these numbers")
}
并且,由于Swift 5.1
枚举关联的类型可以具有默认值。这是一个很棒的功能,因此您只需要执行以下操作:
enum Thingy: Equatable {
case one(String = "")
case two
case three
}
func doSomethingAlt(with value: Thingy) {
guard value == .one() || value == .three else {
print("Two")
return
}
print("I like these numbers")
}