swift - 什么决定了协议(protocol)一致性的优先级?

标签 swift enums protocols

只是对某件事感到好奇。

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

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

最佳答案

协议(protocol)一致性顺序并不重要。在您的情况下,当您将 String 放在 CodingKey 之后时,您会收到错误,因为 String 不是协议(protocol)。它是一个结构体。查看 Xcode 中收到的错误消息:

Raw type 'String' must appear first in the enum inheritance clause

通过在枚举声明之后放置 String 将定义其原始值。

为了证明这一点,让我们定义两个协议(protocol):

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"
}

关于swift - 什么决定了协议(protocol)一致性的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66583312/

相关文章:

java - 实现类似的缺失一项特征

windows - 使用自定义协议(protocol)打开 URL - 语法错误?

git - 用于推送的 Git native 协议(protocol)或 SSH 协议(protocol)之间的区别

ios - 无法读取 firebase 数据

ios - 如何在后台放置按钮?

c# - 使用值从 C# 中的枚举中获取正确的名称

linux - 动态修改数据流

ios - 无法使用参数调用 '=='

ios - UISlider 不更新 Swift 中的当前值

c# - 优雅地解析 C# 枚举