【问题标题】:get json of an array of object in swift快速获取对象数组的json
【发布时间】:2018-02-15 21:05:38
【问题描述】:

我想快速获取对象数组的json

class action {
    var ts: Int;
    var winner: Int;
    var meta: [Int: String];

    init(ts : Int, winner: Int, meta: [Int: String]) {
        self.ts = ts;
        self.winner = winner;
        self.meta = meta;
    }
}

var actions:[action] = []

let thisAction = action(ts: 123, winner: 1, meta: [:]);
actions.append(thisAction);

let jsonEncoder = JSONEncoder();
let jsonData = try jsonEncoder.encode(actions);

但我有以下错误:

致命错误:Array 不符合 Encodable,因为 action 不符合 Encodable。:文件 /BuildRoot/Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-900.0.74.1/src/ swift/stdlib/public/core/Codable.swift,第 3962 行

【问题讨论】:

  • 你没有说class action : Encodable,所以你猜怎么着,它不能通过 JSONEncoder 编码。 [请叫它Action,而不是action。这是一堂课。]

标签: json swift codable


【解决方案1】:

错误信息很清楚,你需要在你的Action类上继承Codable

class Action: Codable {
    var ts: Int
    var winner: Int
    var meta: [Int: String]

    init(ts : Int, winner: Int, meta: [Int: String]) {
        self.ts = ts
        self.winner = winner
        self.meta = meta
    }
}

提示 1:在 Action 类上使用大写 A

提示 2:不要使用 ;,在 Swift 中不需要它

提示 3:使用 do-try-catch:

do {
    let jsonData = try JSONEncoder().encode(actions)
    print(jsonData)
} catch let error {
    print(error)
}

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2017-03-20
    • 2018-11-26
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多