【问题标题】:Swift Add codable to array of codableSwift将可编码添加到可编码数组
【发布时间】:2018-12-20 19:03:26
【问题描述】:

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

例子:

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

Swift4 代码:

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)
        }

我的错误(在线 rooms.append):

无法将“ViewController.Room”类型的值转换为预期的参数类型“ViewController.Rooms”(又名“字典”)

【问题讨论】:

  • db?.prepare(isco_room_time) 究竟返回了什么?
  • var rooms = [Rooms]() 与var rooms = [[String: Room]]() 相同,但是您随后尝试将Room 的实例附加到它,这显然是不兼容的。将var rooms = [Rooms]() 更改为var rooms = [Room]()

标签: json swift multidimensional-array


【解决方案1】:

为什么需要这个?

typealias Rooms = [String: Room]

如果你想要一个 Codable 对象数组,你不需要别名 改变

var rooms = [Rooms]()

到

var rooms = [Room]()

会起作用的。

【讨论】:

  • 他的 JSON 不是[Room](Room 对象的数组),而是Rooms([String: Room] 的字典,这不是一回事。他的问题文本说这是Room的数组,但JSON本身实际上是一个字典。
【解决方案2】:

因为房间是字典,你不应该使用 append

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

【讨论】:

    【解决方案3】:

    你可以试试

    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)
      }
    

    【讨论】:

    • 还有房间,在哪里? :)
    • 什么类型的dbs.prepare(isco_room_time) ??
    • @Sh_Khan 你的答案有什么解释吗?任何人都可以写“你可以试试”
    • @RobertDresler 我的回答是自我描述的,应该是我与开发人员而不是初学者交谈
    • @Sh_Khan 这样做,试试这个,使用这个。你有 38k 的业力,这会让你成为一名优秀的程序员吗?你有多年的经验,这会让你成为优秀的程序员吗?也许你有一些知识,但你的自我比它应该的要大......
    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多