NS_EXTENSIBLE_STRING_ENUM - ShenYj/ShenYj.github.io GitHub Wiki

NS_EXTENSIBLE_STRING_ENUM

Apple 建议弃用 NS_STRING_ENUM/NS_EXTENSIBLE_STRING_ENUM 而改用 NS_TYPED_ENUM/NS_TYPED_EXTENSIBLE_ENUM, 两者效果完全一样

可扩展枚举以与不可扩展枚举 NS_STRING_ENUM、NS_TYPED_ENUM 类似的方式导入,不同之处在于它们接收一个额外的初始化器。

起初看文档时,我以为只有在使用 NS_EXTENSIBLE_STRING_ENUM、NS_TYPED_EXTENSIBLE_ENUM 时才能在 Swift 代码中为可扩展枚举添加新值

在我用 Xcode 13 实测下,都可以扩展新增值,只是在初始化新值时,要按照文档描述那样的

  • Swift中为其扩展新增值

    public extension Week {
        // NS_TYPED_ENUM
        static var freeDay: Week { Week(rawValue: "WeekFreeDay") }
        // NS_TYPED_EXTENSIBLE_ENUM
        //static var freeDay: Week { Week("WeekFreeDay") }
    }

    在查阅生成 Swift 接口中只能看到一个初始化器 public init(rawValue: String), 并未看到苹果官方文档中描述的多了一个 init(_ rawValue: RawValue) 隐藏了外部参数标签的初始化,但在实际使用中又确实如文档描述那样

参考资料: Grouping Related Objective-C Constants

⚠️ **GitHub.com Fallback** ⚠️