Удалить структуру из массива структур, если элемент структуры строки равен нулю или пустой swift - PullRequest
0 голосов
/ 24 марта 2020

Допустим, у меня есть простая структура как таковая:

struct Model: Codable {
     var myVariable: String
     var myVariable2: String?
}

И скажем иногда, myVariable2 - это значение типа ether nil / null (из json) или буквальная пустая строка как таковая "" ,

Как бы я отфильтровал пустой ноль / ноль и удалил эту конкретную структуру из массива структур?

Я попытался:

Model.compactMap{ $0.myVaraible2 }.flatMap { $0 } 

, чтобы отфильтровать заданную строку c. Но, очевидно, я не получаю желаемого результата, потому что это неправильно. Итак, чтобы сначала отфильтровать значение nil / empty, а затем удалить эту структуру из массива, это должно быть довольно просто, да?

Могу ли я отфильтровать его сразу после вызова JSONDecoder?

let model = try JSONDecoder().decode([Model].self, from: data)

что-то вроде: я знаю, что следующая строка кода не годится. =)

for element in model {
    if element.myVariable2.isEmpty || element.myVariable2 == "" { 
    model.remove(at: what to put here ? )
}

Я знаю, что для l oop ПЛОХО !!! но как бы это исправить или сделать что-то более быстрое?

Спасибо!

1 Ответ

1 голос
/ 24 марта 2020

Инструмент, который вам нужен: filter:

let filteredModels = model.filter { $0.myVariable2 != nil }

При этом удаляются все элементы, которые имеют ноль для этого свойства. Однако это свойство все еще является необязательным, поскольку вы определили его таким образом. Если вы также хотите проверить "", вы можете добавить это к предикату:

let filteredModels = model.filter { $0.myVariable2 != nil && $0.myVariable2 != "" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...