Swift枚举类型别名的用法

7
好的,我已经做好了功课并阅读了能找到的内容,但似乎找不到在Swift中是否可以实现这一点。我有一个枚举在许多地方都使用:SomeEnum,其中一个case是冗长的SomeEnum.SomeLengthyCaseName,我厌倦了在我的代码中无处不见它。我不想重构,因为我喜欢新手维护我的代码时案例的描述性质。
所以问题来了:是否可以为SomeEnum.SomeLengthyCaseName创建一个类型别名?如果可以,如何实现?以下是我尝试过的方法:
enum SomeEnum {
    case SomeLengthyCaseName
}

typealias SLCN = SomeEnum.SomeLengthyCaseName

这是语法,但是Xcode会报编译错误,提示"SomeLenghtyCaseName不是SomeEnum的成员。"

准备,开始!

2个回答

17

这是一个误导性错误信息

真正的问题在于SomeLengthyCaseName并不是一个类型。因此,您无法使用typealias,它只适用于类型的别名。(例如,您可以说typealias SE = SomeEnum。)

相反,您可以使用全局常量:

let SLCN = SomeEnum.SomeLengthyCaseName

或者更好的方法是,在枚举本身上定义一个静态常量:

enum SomeEnum {
    case SomeLengthyCaseName
    static let SLCN = SomeEnum.SomeLengthyCaseName
}

let x: SomeEnum = .SLCN

啊!扇脸!我不知道为什么我没有意识到那个问题。感谢你指出来。还有,感谢你提供的替代方案。我喜欢第二个,因为它不会让“别名”从哪里来成为一个谜。缓冲区结束后我会立即接受。 - Clay Ellis

1

这是不可能的,因为SomeEnum.SomeLengthyCaseName不是一种类型,而是SomeEnum类型的一个值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接