gpt4 book ai didi

swift - typealias 可以 Codable 吗?

转载 作者:行者123 更新时间:2023-11-28 13:23:10 27 4
gpt4 key购买 nike

我有一个根对象,它主要由一个元组数组和一堆状态枚举组成。元组是这样描述的:

typealias Program = [(Number, Statement)]

根对象目前是 NSCoding,但我想添加 Codable 以切换到 JSON。在大多数情况下,使各个部分成为 Codable 只需要将 , Codable 添加到它们的声明中,但这对元组不起作用。我认为这只是一个语法问题,但这些都不起作用:

typealias Program, Codable = [(Number, Statement)]
typealias Program = [(Number, Statement)], Codable

这可能吗? horrible documentation在描述协议(protocol)本身时只提到 typealias,也许我的 Google-fu 失败了,但我没有在 SO 上看到有说服力的引用。

更新:根对象:

typealias Program = [(Number, Statement)]

public enum InterpreterState: Int, Codable {
case Idle
case ReadingStatement // while parsing code
case Running // while running it
case ReadingInput // while waiting on user input
}

public final class Interpreter: NSObject, NSCoding {
/// Array of program lines
var program: Program = Array()

/// State
var state: InterpreterState = .Idle

等等

最佳答案

元组不是Codable。如果您考虑一下,(Number, Statement) 的键应该是什么? (我可能听起来命名元组是可编码的,但它们都不是)

创建你自己的结构:

    struct ProgramLine: Codable {
let lineNumber: Number // assuming these types are codable
let statement: Statement
}

然后您的类型别名也将是可编码的(无需您做任何事情)!

    typealias Program = [ProgramLine]

关于swift - typealias 可以 Codable 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58805338/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com