在确定枚举的关联类型时,您(现在?Swift5?)可以将 "if case" 写为布尔值吗?
Can you (now? Swift5?) write "if case" as a boolean when determining an enum's associated type?
假设您需要确定枚举的实际关联类型。
所以,像
这样的情况
enum MessageItem: Decodable {
case a(Images)
case b(Text)
case c(Reply)
...
}
我曾经有过这样的代码
xSome = x.filter {
switch [=12=] {
case .a(_):
return false
case .b(_):
return true
case .c(_):
return true
}
}
但是这样的代码是可能的
xSome = x.filter {
if case .a = [=13=] { return false }
return true
}
现在有什么方法可以 Swift 与生成布尔值的关联类型进行比较吗?
所以,类似于:
xSome = x.filter {
return (case .a = [=14=])
}
所以,像 anEnum.is( .someCase )
Swift现在有这样的东西吗?
(当然,我的意思是不在枚举中添加 var,当然你可以这样做。)
如果您将具有关联值的枚举声明为 Equatable,则它们是 Equatable。这是比赛的状态:
enum MyEnum : Equatable {
case hey
case ho
case heyNonnyNo(String)
}
let e = MyEnum.hey
e == .hey // true
e == .ho // false
// e == .heyNonnyNo // blap, illegal
let e2 = MyEnum.heyNonnyNo("hello")
e2 == .heyNonnyNo("hello") // true
e2 == .heyNonnyNo("goodbye") // true
为什么 e == .heyNonnyNo
是非法的?因为不清楚这意味着什么。这种情况具有关联的价值;它的值 是 关联值。所以我们可以检查这个case的两个实例是否有相同的关联值,但是我们不能只问(使用==
)一个实例是否是some this的关联值案例.
所以如果那是我们想知道的,我们回到if case
:
if case .heyNonnyNo = e2 {
print("it's a hey nonny no")
}
但是你不能说没有 if
(用于条件),因为 if case
是关键字; case
不能单独存在。如果你真的需要一个 Bool,你可以这样写:
let ok : Bool = {
switch e2 {
case .heyNonnyNo: return true
default: return false
}
}()
假设您需要确定枚举的实际关联类型。
所以,像
这样的情况enum MessageItem: Decodable {
case a(Images)
case b(Text)
case c(Reply)
...
}
我曾经有过这样的代码
xSome = x.filter {
switch [=12=] {
case .a(_):
return false
case .b(_):
return true
case .c(_):
return true
}
}
但是这样的代码是可能的
xSome = x.filter {
if case .a = [=13=] { return false }
return true
}
现在有什么方法可以 Swift 与生成布尔值的关联类型进行比较吗?
所以,类似于:
xSome = x.filter {
return (case .a = [=14=])
}
所以,像 anEnum.is( .someCase )
Swift现在有这样的东西吗?
(当然,我的意思是不在枚举中添加 var,当然你可以这样做。)
如果您将具有关联值的枚举声明为 Equatable,则它们是 Equatable。这是比赛的状态:
enum MyEnum : Equatable {
case hey
case ho
case heyNonnyNo(String)
}
let e = MyEnum.hey
e == .hey // true
e == .ho // false
// e == .heyNonnyNo // blap, illegal
let e2 = MyEnum.heyNonnyNo("hello")
e2 == .heyNonnyNo("hello") // true
e2 == .heyNonnyNo("goodbye") // true
为什么 e == .heyNonnyNo
是非法的?因为不清楚这意味着什么。这种情况具有关联的价值;它的值 是 关联值。所以我们可以检查这个case的两个实例是否有相同的关联值,但是我们不能只问(使用==
)一个实例是否是some this的关联值案例.
所以如果那是我们想知道的,我们回到if case
:
if case .heyNonnyNo = e2 {
print("it's a hey nonny no")
}
但是你不能说没有 if
(用于条件),因为 if case
是关键字; case
不能单独存在。如果你真的需要一个 Bool,你可以这样写:
let ok : Bool = {
switch e2 {
case .heyNonnyNo: return true
default: return false
}
}()