typealias可以编码吗



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

typealias Program = [(Number, Statement)]

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

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

这可能吗?可怕的文档在描述协议本身时只提到了typealias,也许我的谷歌功能失败了,但我在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]

相关内容

  • 没有找到相关文章

最新更新