You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何内联指定枚举类型的数组?

解决Swift内联指定枚举类型创建数组的问题

你可以通过以下几种方式实现类似你想要的简洁写法:

方法1:使用Array的arrayLiteral初始化器

直接通过指定类型的初始化器创建数组,内部元素可省略枚举前缀:

if Array<MyEnum2WithLongName>(arrayLiteral: .a, .b, .c).contains(currentStatus) {
    // do something
}

这种写法明确指定了数组元素类型,编译器能正确推断.a、.b属于MyEnum2WithLongName类型。

方法2:自定义泛型辅助函数

如果觉得上面的写法仍有冗余,可以写一个通用辅助函数简化:

func arr<T>(_ elements: T...) -> [T] {
    elements
}

使用时只需在第一个元素上指定枚举类型,后续元素直接用点语法:

if arr(MyEnum2WithLongName.a, .b, .c).contains(currentStatus) {
    // do something
}

若希望完全在开头指定类型、不用写第一个元素的前缀,可调整辅助函数:

func arr<T>(of type: T.Type, _ elements: T...) -> [T] {
    elements
}

调用方式:

if arr(of: MyEnum2WithLongName.self, .a, .b, .c).contains(currentStatus) {
    // do something
}

方法3:类型别名简化枚举名

如果枚举名称确实过长,可先定义短类型别名:

typealias E2 = MyEnum2WithLongName

之后创建数组时就能大幅简化:

if [E2.a, E2.b, E2.c].contains(currentStatus) {
    // do something
}

这些方法都能避免重复书写冗长的枚举类型名称,实现更简洁的内联数组创建。

内容的提问来源于stack exchange,提问作者EvGeniy Ilyin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:31:14