1

我有一个与此类似的枚举,其中所有案例都包含相同的关联值content

enum RowType {
    case single(_ content: [Any])
    case double(_ content: [Any])
    case triple(_ content: [Any])
    ...
}

我知道我可以将 astruct与 a 一起使用rowTypeacontent属性,但请不要讨论这个,而是看看以下内容: 当我想切换所有情况时,我当然可以这样做:

switch row {
case .single(let content):
    // do anything
    break
case .double(let content):
    // ...
...
}

甚至:

switch row {
case .single(let content), .double(let content), ...:
    // do the same thing for all cases
    break
}

现在我的枚举包含更多的案例,并且在开发过程中可能会进一步增长,所以我不方便将所有案例都列出在同一个案例中case语句中列出所有案例来解开content论点。

所以我很好奇并想知道:我能否以某种方式“通配符”枚举案例本身并仍然打开content字段?就像一个default具有相关价值的案例......

我希望能够做类似的事情...

switch row {
case _(let content):
    // do something
    break
}

...或者可能在默认情况下访问关联的值。

我做了一些研究,但找不到答案,所以我很高兴你的想法。

4

1 回答 1

1

在操场上试试这个。

enum RowType {
case single(_ content: [Any])
case double(_ content: [Any])
case triple(_ content: [Any])
case noVal

var associatedValue: Any? {
    get {
        let mirror = Mirror(reflecting: self)
        if let associated = mirror.children.first {
            return  associated.value
        }
        print("WARNING: Enum option of \(self) does not have an associated value")
        return  nil
    }
  }
}

let row : RowType = .double([1,2,3])
let rowNoVal : RowType = .noVal
row.associatedValue
rowNoVal.associatedValue
于 2019-09-02T18:31:36.620 回答