Как отфильтровать из массива в ios swift - PullRequest
0 голосов
/ 25 марта 2019

У меня есть массив, в который я добавляю значения из JSON.

как это

var tagsarray = [Tagging]()

tagsarray.append(Tagging.init(tags: tempTag[0], selected: false))
tagsarray.append(Tagging.init(tags: tempTag[1], selected: false))

Модель

struct Tagging {
private(set) public var tags : String
 public var selected : Bool

init(tags : String, selected : Bool) {
    self.tags = tags
    self.selected = selected
  }
}

Теперь моя задача - отфильтровать массив из тех же значений.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Если вам не важен порядок, вы можете просто поместить все элементы в Set и преобразовать обратно в массив.
Для этого ваш тип должен соответствовать Hashable.
Если все свойства вашего типа Hashable, то вы можете просто добавить : Hashable, и компилятор позаботится об остальном.

struct tagging: Hashable {
    private(set) public var tags : String
    public var selected : Bool

    init(tags : String, selected : Bool) {
        self.tags = tags
        self.selected = selected
    }
}
tagsarray = Array(Set(tagsarray))

Но если вам нужно сохранить порядок предметов, вам нужно отфильтровать руками. Для этого вам понадобится Equatable. Он работает так же, как Hashable, компилятор будет обрабатывать реализацию для вас.

struct tagging: Equatable {
    private(set) public var tags : String
    public var selected : Bool

    init(tags : String, selected : Bool) {
        self.tags = tags
        self.selected = selected
    }
}

tagsarray = tagsarray.reduce(into: []) { uniqs, tag in
    guard !uniqs.contains(tag) else { return }
    uniqs.append(tag)
}
0 голосов
/ 25 марта 2019
  let filteredArray = tagsarray.filter {$0.tags == "1"}
  print(filteredArray)

попробуйте эту простую функцию фильтра

...