【问题标题】:Swift typealias for enum case枚举案例的 Swift 类型别名
【发布时间】:2015-11-16 15:30:39
【问题描述】:

好的,我已经完成了我的作业并阅读了我能找到的内容,但我似乎无法找到这是否可以用 Swift 完成。我有一个到处都在使用的枚举:SomeEnum,如果是cases,则它是一个冗长的SomeEnum.SomeLengthyCaseName,我已经厌倦了在我的代码中看到它。我不想重构,因为我喜欢新手维护我的代码时案例的描述性。

所以问题来了:是否可以为SomeEnum.SomeLengthyCaseName 创建一个typealias?如果是这样,怎么办?这是我尝试过的:

enum SomeEnum {
    case SomeLengthyCaseName
}

typealias SLCN = SomeEnum.SomeLengthyCaseName

这是语法,但 Xcode 给出了一个编译器错误,提示“SomeLenghtyCaseName 不是SomeEnum 的成员。”

准备好,出发!

【问题讨论】:

    标签: ios swift syntax enums type-alias


    【解决方案1】:

    那是misleading error message

    真正的问题是SomeLengthyCaseName 不是类型。因此您不能使用typealias,它仅用于types 的别名。 (例如,你可以说typealias SE = SomeEnum。)

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

    let SLCN = SomeEnum.SomeLengthyCaseName
    

    或者,更好的是,枚举本身的静态常量:

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

    【讨论】:

    • 啊!面对手掌!我不知道为什么我没有意识到这一点。感谢您指出了这一点。并感谢替代解决方案。我喜欢第二个,因为“别名”的来源并不神秘。缓冲区一结束,我会接受。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多