我正在学习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() }
}