我有一个根对象,它主要由元组数组和一组状态枚举组成。元组是这样描述的:
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]