Swift 将可编码添加到可编码数组中



我希望将一行SQlite转换为JSON数组。

例:

{
    "0": {
      "room_id": "5034"
    },
    "1": {
      "room_id": "5199"
    },
    "2": {
      "room_id": "5156"
    }
}

迅捷4代码:

typealias Rooms = [String: Room]
struct Room: Codable {
    let roomID: String
    enum CodingKeys: String, CodingKey {
        case roomID = "room_id"
    }
}
    var rooms = [Rooms]()

        for room in try (db?.prepare(isco_room_time))! {
            let export: Room = Room(roomID: room[room_id])
            rooms.append(export)
        }

我的错误(在线房间.append):

无法将类型"ViewController.Room"的值转换为预期的参数类型"ViewController.Rooms"(也称为"字典")

你为什么需要这个?

typealias Rooms = [String: Room]

如果你想要一个可编码对象的数组,你不需要别名改变

var rooms = [Rooms]()

var rooms = [Room]()

会工作。

由于 room 是字典,因此不应使用 append

for room in try (db?.prepare(isco_room_time))! {
    let export: Room = Room(roomID: room[room_id])
    rooms[room_id] = export
}
你可以

试试

var counter = 0
var rooms = [String:Room]()
 do {
      guard let dbs = db else { return }
      let res = try dbs.prepare(isco_room_time)
      for room in res {
       let export: Room = Room(roomID: room.id)
       rooms["(counter)"] = export
        counter += 1
     }
   }
  catch {
    print(error)
  }

最新更新