Swift枚举与自定义初始化失去rawValue初始化
我试图把这个问题煮到它的最简单的形式与以下。
建立 Xcode版本6.1.1(6A2008a) 在MyEnum.swift中定义的枚举: internal enum MyEnum: Int { case Zero = 0,One,Two } extension MyEnum { init?(string: String) { switch string.lowercaseString { case "zero": self = .Zero case "one": self = .One case "two": self = .Two default: return nil } } } 和在另一个文件MyClass.swift中初始化枚举的代码: internal class MyClass { let foo = MyEnum(rawValue: 0) // Error let fooStr = MyEnum(string: "zero") func testFunc() { let bar = MyEnum(rawValue: 1) // Error let barStr = MyEnum(string: "one") } } 错误 Xcode在尝试使用其原始值初始值设置初始化MyEnum时给出以下错误: Cannot convert the expression's type '(rawValue: IntegerLiteralConvertible)' to type 'MyEnum?' 笔记 >每the Swift Language Guide:
> MyEnum的自定义初始化程序在扩展中定义,用于测试枚举的原始值初始值程序是否正在从the Language Guide的下列情况中删除。但是,它实现了相同的错误结果。
>将枚举定义移动到MyClass.swift解析bar的错误,但不解析foo的错误。 init?(raw: Int) { self.init(rawValue: raw) } >在MyClass.swift中明确声明与RawRepresentable的协议一致性解决了bar的内联错误,但会导致关于重复符号的链接器错误(因为原始值类型枚举隐式符合RawRepresentable)。 extension MyEnum: RawRepresentable {} 任何人都可以提供更多的洞察这里发生了什么?为什么不能访问原始值初始化程序?
这个bug在Xcode 7和Swift 2中解决
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |