Swift5 你能(现在?迅捷5号?)写下“吗?”;如果是“案例”;当确定枚举';关联类型是什么?
假设您需要确定枚举的实际关联类型 那么像这样的情况,Swift5 你能(现在?迅捷5号?)写下“吗?”;如果是“案例”;当确定枚举';关联类型是什么?,swift5,Swift5,假设您需要确定枚举的实际关联类型 那么像这样的情况, enum MessageItem: Decodable { case a(Images) case b(Text) case c(Reply) ... } 我以前有这样的代码 xSome = x.filter { switch $0 { case .a(_): return false ca
enum MessageItem: Decodable {
case a(Images)
case b(Text)
case c(Reply)
...
}
我以前有这样的代码
xSome = x.filter {
switch $0 {
case .a(_):
return false
case .b(_):
return true
case .c(_):
return true
}
}
xSome = x.filter {
if case .a = $0 { return false }
return true
}
但是这样的代码是可能的
xSome = x.filter {
switch $0 {
case .a(_):
return false
case .b(_):
return true
case .c(_):
return true
}
}
xSome = x.filter {
if case .a = $0 { return false }
return true
}
现在是否有某种方法可以快速地与生成布尔值的关联类型进行比较
比如说:
xSome = x.filter {
return (case .a = $0)
}
所以,类似于anEnum.is(.someCase)
斯威夫特现在有这样的东西吗
(当然,我的意思是不在枚举中添加var,当然您可以这样做。)如果您声明具有关联值的枚举是相等的,则它们是相等的。以下是游戏状态:
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
是非法的?因为不清楚这意味着什么。此案例具有关联值;其值是关联的值。因此,我们可以检查此案例的两个实例是否具有相同的关联值,但我们不能仅仅询问(使用=
)一个实例是否是此案例的某个关联值
因此,如果这是我们想要知道的,我们回到if case
:
if case .heyNonnyNo = e2 {
print("it's a hey nonny no")
}
但是如果没有if
(用于条件句),就不能这么说,因为if-case
是关键词<代码>案例本身不能存在。如果你真的需要一本书,你可以这样写:
let ok : Bool = {
switch e2 {
case .heyNonnyNo: return true
default: return false
}
}()
你可以说
anEnum==.someCase
。在什么情况下这样做不行?如果是因为您真正想要比较的是关联的值?然后你可以说anEnum==.someCaseWithAssociatedValue(TheValuetoStageList)
。如果您将枚举声明为可等式,则它们是可等式的。啊!“如果情况”是一个关键词;这是一个很好的事实,为了证明如果case
是关键字,请尝试将if
后面的所有内容都用括号括起来。你不能。单词大小写不是布尔表达式的开头。-我并不是说你的想法是个坏主意,一点也不;我只是在描述语言的状态。没错,很棒的信息。是的,我意识到这个问题不够明确,我编辑了它。看起来“如果情况”是最先进的!!有点奇怪,没有类似于anEnum.isCase(.someCase)
的东西;也许在将来。