首页 > 解决方案 > 什么决定了协议一致性的优先级?

问题描述

只是对某事感到好奇。

private enum CodingKeys: String, CodingKey {
    case id = "page"
}

如果我将 String 放在 CodingKey 协议之后,我会收到一条错误消息,说我需要将 String 放在之前.. 什么决定了优先级,为什么这很重要?提前致谢。

标签: swiftenumsprotocols

解决方案


协议一致性顺序无关紧要。String在您的情况下,当您放置在CodingKeyis 因为String不是协议时,您会收到错误。它是一个结构。看看你在 Xcode 中得到的错误信息:

原始类型“字符串”必须首先出现在枚举继承子句中

通过放置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"
}

推荐阅读