Как игнорировать некоторые объекты в JSON проанализированных данных? - PullRequest
0 голосов
/ 21 марта 2020

Для экземпляра, как показано в примере JSON data, я хочу сохранить объект, который имеет свойство content & video, и игнорировать тот, у которого их нет. Такие объекты, как 2-й, 3-й, имеющие только адрес и свойство ошибки, должны игнорироваться.

/ / JSON пример данных

[
  {
    "content": "asdhh",
    "url": "dasddd",
    "country": "kkjkkj",
    "address": "aksjdkasjd"
  },
  {
    "address": "aabbccdd"
  },
  {
    "error": "error description"
  }
]

Я пытаюсь использовать if video.content != nil && video.url != nil управлять отображением VideoListRow в ForEach l oop. Но оказывается, что я не смог вызвать video.property в закрытии ForEach. Так как же я мог игнорировать нежелательные проанализированные данные и показывать только нужный объект, в этом случае был нужен только первый объект.

var body: some View {
        List {
            ForEach(self.model.videos) { video in
                if video.content != nil && video.url != nil {
                  VStack(spacing: 0) {
                      VideoListRow(video: url)
                  }
                }
            }
        }.onAppear() {
            self.model.getVideoBundle()
        }
    }

// Изменить мой код для добавления фильтра: Незначительное изменение заключается в использовании ||, но не &&. Поскольку я хочу сохранить объект, который имеет только один из содержимого и URL, этот является допустимым. Только если он не включает два из них, игнорируйте его.

ForEach(
    self.model.videos.filter { (video) -> Bool in
        video.content != nil || video.url != nil
    }
) { video in
    VStack(spacing: 0) {
        VideoListRow(video: url)
    }
}

1 Ответ

0 голосов
/ 21 марта 2020

сначала отфильтруйте данные!

ForEach(
    self.model.videos.filter { (video) -> Bool in
        video.content != nil && video.url != nil
    }
) { video in
    VStack(spacing: 0) {
        VideoListRow(video: url)
    }
}
...