【发布时间】:2019-08-15 07:49:39
【问题描述】:
我有一个与此类似的枚举,其中所有案例都包含相同的关联值content:
enum RowType {
case single(_ content: [Any])
case double(_ content: [Any])
case triple(_ content: [Any])
...
}
我知道我可以将struct 与rowType 和content 属性一起使用,但请不要讨论这个问题,而是看看以下内容:
当我想切换所有情况时,我当然可以这样做:
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 案例... p>
我希望能够做到类似 ...
switch row {
case _(let content):
// do something
break
}
...或者可能在默认情况下访问关联的值。
我做了一些研究,但找不到答案,所以我很期待你的想法。
【问题讨论】:
-
不存在这样的功能。使用带有 rowType 和 content 属性的结构将是正确的方法。
-
一种可能的解决方案是向您的枚举添加一个计算属性,该属性包含一个开关,然后返回您的。内容。您仍然需要包含所有可能性,但只需包含一次。
-
现在不可能,即使每个案例都可能包含不同类型的关联值(或根本没有),并且编译器无法使用单个通配符处理所有这些值
-
@MichaelSalmon 嗯,这实际上是个好主意!感谢分享!
-
@RicoCrescenzio 是的,它可以,但我不能告诉他依靠它,比如强制解开枚举值吗?类似于“每当我可以打开类型为
[Any]的关联值”的情况。我的意思是,它仍然是一个提供默认子句作为后备的开关......你知道我的意思吗?
标签: swift xcode switch-statement associated-value