Обновления таблицы из массива JSON, но сортировка по алфавиту вызывает ошибку в Swift 3 - PullRequest
0 голосов
/ 03 мая 2018

В моем приложении для iOS я заполняю таблицу из внешнего файла json. Теперь это работает нормально, проблема, с которой я сталкиваюсь, заключается в том, что мне нужно отсортировать таблицу по алфавиту.

Я добавил метод сравнения, и печать его даст мне правильный вывод (список результатов, упорядоченный по их show_name). Однако, когда я пытаюсь добавить эти результаты в таблицу, я получаю сообщение об ошибке.

Вот мой код:

func extract_json(_ data: Data)
{
    let json: Any?
    do{
        json = try JSONSerialization.jsonObject(with: data, options: [])
    }
    catch{
        return
    }

    guard let data_list = json as? NSArray else {
        return
    }

    if let shows_list = json as? NSArray
    {
        for i in 0 ..< data_list.count
        {
            if let shows_obj = shows_list[i] as? NSDictionary
            {
                let show_name = shows_obj["show"] as? String
                let show_image = shows_obj["thumbnail"] as? String
                TableData.append(show_name!)
                var sortedArray = TableData.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
                print(sortedArray)

Если я изменяю TableData.append(show_name!) на TableData.append(sortedArray), я получаю сообщение об ошибке «Не удается преобразовать значение типа '[String]?" к ожидаемому типу аргумента 'String' ".

Существует ли более безопасный / более умный способ алфавитизировать мой массив json по атрибуту перед загрузкой его в таблицу (чем пытаться загрузить его в TableData и затем сравнить, как я сейчас)?

1 Ответ

0 голосов
/ 03 мая 2018

Я думаю, TableData - это массив String, и вы пытаетесь добавить в него String Array. Вот почему вы получаете эту ошибку.

Вы должны сделать так,

TableData.append(contentsOf: sortedArray) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...