我想在Swift应用程序中对某些对象进行编码和解码。我有以下两个班级。
enum TileSize : Int, Codable
{
case smallTile = 3
case mediumTile = 2
case largeTile = 1
}
class Tile: NSObject, Codable
{
var tileSize: TileSize = .smallTile
var imageName: String = "";
var isDragged = false
private enum CodingKeys : String, CodingKey
{
case tileSize
case imageName
}
}
class ConsumptionTile: Tile
{
override var imageName: String
{
get
{
return "consumption"
}
set
{
super.imageName = newValue
}
}
}
这是代码,我如何尝试编码对象。
var defaultTiles : [Tile] = []
defaultTiles.append(ConsumptionTile(tileSize: .largeTile))
defaultTiles.append(Tile(tileSize: .largeTile, imageName: "my-devices"))
defaultTiles.append(Tile(tileSize: .mediumTile, imageName: "live-verbrauch"))
defaultTiles.append(Tile(tileSize: .smallTile, imageName: "zaehlerstand"))
defaultTiles.append(Tile(tileSize: .smallTile, imageName: "vertrag"))
let jsonEncoder = JSONEncoder()
let jsonData = try jsonEncoder.encode(defaultTiles)
我认为问题是,我尝试编码子类ConsuTile的对象,但Array的类型为[Tile]。但我不知道如何解决这个问题。我必须将所有Tile类编码为一个数据对象。稍后将会有更多的子类,而不仅仅是ConsumerTile。
我在运行时获得的错误只是try jsonEncoder.encode(defaultTiles)行的断点,消息为Thread 1:EXC_BAD_ACCESS(code = 1,address = 0x8)
我希望有人可以提供帮助。谢谢!
答案 0 :(得分:0)
我刚在操场上试过,我无法重现错误。唯一可能的问题是通过while(true)
int u =89; // compile time error
- encode
流程丢失了类型信息,其中decode
被解码为ConsumptionTile
。
如果你把它放在游乐场并尝试运行它,你会发现自己。
Tile