什么决定了协议一致性的优先级?
What determines priority in protocol conformance?
只是有点好奇。
private enum CodingKeys: String, CodingKey {
case id = "page"
}
如果我将 String 放在 CodingKey 协议之后,我会收到一条错误消息,提示我需要将 String 放在之前..那么什么决定了优先级,为什么这很重要?提前致谢。
协议一致性顺序无关紧要。在您的情况下,当您在 CodingKey
之后放置 String
时会出现错误,因为 String
不是协议。它是一个结构。查看错误消息 Xcode:
Raw type 'String' must appear first in the enum inheritance clause
通过在枚举声明之后放置 String
将定义其原始值。
为了证明这一点,让我们定义两个协议:
protocol Protocol1 { }
protocol Protocol2 { }
并尝试更改它们符合您的 CodingKeys
枚举的顺序。这将是有效的:
private enum CodingKeys: String, CodingKey, Protocol1, Protocol2 {
case id = "page"
}
这也是有效的:
private enum CodingKeys: String, CodingKey, Protocol2, Protocol1 {
case id = "page"
}
这是一种语言要求,对于 具有原始值类型案例的枚举 的声明,原始值类型必须出现在任何采用的协议之前。
见https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID364
只是有点好奇。
private enum CodingKeys: String, CodingKey {
case id = "page"
}
如果我将 String 放在 CodingKey 协议之后,我会收到一条错误消息,提示我需要将 String 放在之前..那么什么决定了优先级,为什么这很重要?提前致谢。
协议一致性顺序无关紧要。在您的情况下,当您在 CodingKey
之后放置 String
时会出现错误,因为 String
不是协议。它是一个结构。查看错误消息 Xcode:
Raw type 'String' must appear first in the enum inheritance clause
通过在枚举声明之后放置 String
将定义其原始值。
为了证明这一点,让我们定义两个协议:
protocol Protocol1 { }
protocol Protocol2 { }
并尝试更改它们符合您的 CodingKeys
枚举的顺序。这将是有效的:
private enum CodingKeys: String, CodingKey, Protocol1, Protocol2 {
case id = "page"
}
这也是有效的:
private enum CodingKeys: String, CodingKey, Protocol2, Protocol1 {
case id = "page"
}
这是一种语言要求,对于 具有原始值类型案例的枚举 的声明,原始值类型必须出现在任何采用的协议之前。
见https://docs.swift.org/swift-book/ReferenceManual/Declarations.html#ID364