Проблема производительности SwiftUI при отображении условных представлений в элементах в ForEach l oop, встроенных в aScrollView - PullRequest
0 голосов
/ 12 апреля 2020

Работа с SwiftUI:

У меня есть список представлений в ScrollView, который я создаю с помощью ForEach l oop. Я хочу показать или скрыть несколько маленьких флажков в зависимости от 4 различных свойств Bool в структуре, которую я использую в качестве модели для объектов в списке. Проблема в том, что чем больше я добавляю операторов If, тем хуже становится производительность. Без инструкций If список загружается без заминки. Я сталкиваюсь с этой проблемой только с 120 пунктами в списке. Я хотел бы помочь выяснить, что я делаю неправильно!

Вот пример представления содержимого с ScrollView и l oop:

struct ContentView: View {
  @ObservedObject var model = Model()


  var body: some View {
    ScrollView(.vertical, showsIndicators: true){
      VStack(spacing: 10){
        ForEach(model.list){ item in
          ItemView(item: item)
        }
      }
    }
  }// end body
} // end struct

И представления элементов и Структура, которую я использую в качестве модели.

struct ListData: Identifiable {
  var id = UUID()
  var title: String
  var subtitle: String
  var isTrue: Bool
  var isAlsoTrue:Bool
}

struct ItemView: View {
  var item: ListData

  var body: some View {
    VStack(alignment: .leading){
      Text(item.title)
      HStack{
        if item.isTrue{
          FlagView(text: "True")
        }
        if item.isAlsoTrue{
          FlagView(text: "Also")
        }
        Text(item.subtitle)
        Spacer()
      }
      .font(.system(size: 12, weight: .semibold))
    }
    .font(.system(size: 14, weight: .semibold))
  }
}

struct FlagView: View {
  var text: String
  var body: some View {
    Text(text)
      .padding(2)
      .foregroundColor(.white)
      .background(RoundedRectangle(cornerRadius: 2).foregroundColor(.gray))
  }
}

Актуальные объекты имеют 4 свойства Bool, которые я хочу использовать. Есть ли лучший способ скрыть или показать эти флаги в моем списке? Будем очень благодарны за любую помощь в выяснении, что не так с производительностью!

...