swift - 添加枚举后失去了对 Codable 的一致性

标签 swift swiftui

所以我有一个可编码(或曾经是)的结构

struct Person  { 
    let name: String           //<-- Fine
    let age: Int               //<-- Fine
    let location: String       //<-- Fine

    let character: Character.  //<-- Here comes the error (Type Person does not conform to Decodable)
 
}

enum Character {
    case nice, rude 
}

现在我明白了错误。除了枚举之外的每种类型都是 Codable 的,所以在那之前我都很好。现在作为解决这个问题的方法..我很确定这会起作用..

extension Person { 
  private enum CodingKeys: CodingKey { case name, age, location } 
 }

但是即使在告诉 Swift 我想要解码的属性之后我仍然会得到这个错误?不解。

最佳答案

由于您从 key 中排除了 character 进行解码,因此您需要为 character 提供一个初始值。毕竟,所有属性都需要在初始化期间初始化为某个值

最简单的方法是给出nil的初始值:

let character: Character? = nil

当然,你也可以这样做:

let character: Character = .rude

另请注意,您可以使枚举Codable,只需为其提供原始值类型即可:

enum Character: Int, Codable {
    // now nice will be encoded as 0, and rude will be encoded as 1
    case nice, rude
}

关于swift - 添加枚举后失去了对 Codable 的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68296512/

相关文章:

ios - 使用 Xcode 13.3 构建时,格式化程序损坏的 SwiftUI TextField?

swiftui - 将 WKInterfaceTimer 添加到 SwiftUI

json - 如何仅提取标题和艺术家?

ios - 将 NSNumber 转换为 Float 时出现意外行为

objective-c - objc 项目中无法找到以前存在的 Swift 文件

swift - SwiftUI 延迟一段时间后如何显示新 View

swift - 将 UIBezierPath 居中

ios - Swift 测试无法在 Objective-C VC 上找到 Swift 类属性

ios - 从 WKWebView 操作导航 SwiftUI 页面

swift - 带有 SwiftUI View 的 UIKit TabBar