什么决定了协议一致性的优先级?

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