Swift - 为什么字符串不符合 RawRepresentable?



我正在学习Swift,无法理解为什么这个代码是正确的:

enum Test1: String {
case value
}
let test1 = Test1.value.rawValue

但是这个是不正确的,显示错误

struct MyStruct {
}
extension MyStruct: Equatable {
static func == (lhs: MyStruct, rhs: MyStruct) -> Bool {
return true
}
}
enum Test2: MyStruct {
case value
}

我浏览了Swift.String源代码,没有找到rawValue声明。它在Swift中是如何工作的?CCD_ 3是内置类型吗;自动地";符合RawRepresentable,但所有其他类型都必须明确声明其一致性?

请注意,Test.value的类型是Test1,而不是String

有特殊处理(对RawRepresentable的隐式一致性(,但它适用于字符串值枚举,而不是String本身。

原始值可以是字符串、字符或任何整数或浮点数类型。每个原始值在其枚举声明。

https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html


但这仅用于使用基于冒号的快捷方式语法。手动符合没有问题。

enum Test2 {
case value
}
extension Test2: RawRepresentable {
init?(rawValue: MyStruct) {
self = .value
}

var rawValue: MyStruct { .init() }
}

相关内容

  • 没有找到相关文章

最新更新