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)
的东西;也许在将来。