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
相关产品推荐
相关产品推荐

