Swift, как преобразовать пользовательский массив в массив enum - PullRequest
0 голосов
/ 18 января 2019

У меня есть приложение, которое использует собственный массив для заполнения данных в табличном представлении. Я хотел бы разделить эти данные на два раздела в табличном представлении. Прошел несколько уроков и нашел подход, который мне нравится использовать enum. Учебное приложение работает нормально, используя [[String: String]]] ().

Каждая попытка преобразовать мои данные в [[String: String]]] () не удалась, и я не могу преобразовать мои данные в формат enum.

Приведенный ниже код является примером того, что я пытаюсь сделать, но я пробовал много других способов, которые также не работали.

Любые предложения будут оценены.

Новый код, текущая ошибка:

"Невозможно присвоить значение типа '[TableViewController_Main.Category]" типу ArraySlice <[TableViewController_Main.Category]>' "

enum TableSection: Int {
    case requests = 0, appointments, total
}

struct Category {
    var clientName: String
    var appType: String
    var appDateTime: String
    var status: String

    var photo: UIImage?
}

var dataView = [[TableSection: Category]]()
var dataViewLoop = [Category]()

func SetData() {

    for tableData in datas {

        guard let data1 = Category(clientName: tableData.client_name ?? "",
                                   appType: tableData.app_type ?? "",
                                   appDateTime: tableData.app_date_time ?? "",
                                   status: tableData.app_date_time ?? "",
                                   photo: tableData.photo ?? nil) as Category? else {
            fatalError("Unable to instantiate")
        }

        dataViewLoop += [data1]
    }

    dataView[.appointments] = dataViewLoop.filter({ $0.status == "confirmed" })
    dataView[.requests] = dataViewLoop.filter({ $0.status == "request" })
    // Cannot assign value of type '[TableViewController_Main.Category]' to type 'ArraySlice<[TableViewController_Main.Category]>'

1 Ответ

0 голосов
/ 18 января 2019

Я должен исправить свой комментарий сверху. Ваш dataView должен быть типа [TableSection: [Category]].

Теперь несколько слов о вашей setData функции. В вашем цикле вы используете оператор объединения нулей ?? при инициализации категории. Может быть, я что-то упустил, но я не вижу, как это может привести к фатальной ошибке. В категории нет сбойного инициализатора. Сейчас я точно не знаю, что такое datas и откуда оно берется, но если некоторые свойства там являются необязательными, я бы рекомендовал сделать их необязательными и в категории.

Затем попробуйте поработать с map для преобразования ваших данных. Вот пример:

var dataView = [TableSection: [Category]]()
var dataViewLoop = (0 ..< 10).map { i -> Category in
  let status = i % 2 == 0 ? "confirmed" : "request"

  return Category(clientName: "\(i)", appType: "\(i)", appDateTime: "nil", status: status, photo: nil)
}

dataView[.appointments] = dataViewLoop.filter({ $0.status == "confirmed" })
dataView[.requests] = dataViewLoop.filter({ $0.status == "request" })
...