Swift Добавить кодируемый в массив кодируемых - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу преобразовать строку 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)
        }

Моя ошибка (в комнатах линии.append):

Невозможно преобразовать значение типа 'ViewController.Room' в ожидаемый тип аргумента 'ViewController.Rooms' (он же 'Словарь')

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Зачем вам это нужно?

typealias Rooms = [String: Room]

Если вам нужен массив объектов Codable, вам не нужен псевдоним. Изменение

var rooms = [Rooms]()

На

var rooms = [Room]()

Будет работать.

0 голосов
/ 20 декабря 2018

Так как комнаты - это словарь, вы не должны использовать append

for room in try (db?.prepare(isco_room_time))! {
    let export: Room = Room(roomID: room[room_id])
    rooms[room_id] = export
}
0 голосов
/ 20 декабря 2018

Можно попробовать

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)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...