SwiftUI & CoreData - упорядоченный список - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь создать упорядоченный список в SwiftUI, используя записи CoreData. Как напечатать бегущие числа в таком списке?

В следующем примере у меня есть одна сущность с именем SomeEntity с атрибутом String с именем title .

import SwiftUI
struct ContentView: View {

   var fetchRequest: FetchRequest<SomeEntity>
   var items: FetchedResults<SomeEntity> { fetchRequest.wrappedValue }

   var body: some View {
      NavigationView {
         List {

            ForEach(items, id: \.self) {item in

            NavigationLink(destination: ItemDetailsView(item: item)) {

                HStack {
                    Text("99")
                    // How to print running number instead of "99" in this ordered list of CoreData records?
                    // I was thinking about something like this:
                    // Text(items.id) - but this doesn't work. Is there something similar?
                        .multilineTextAlignment(.center)
                        .frame(width: 60)
                    Text(item.title!)
               }
           }
           }


         }
      }
   }
}

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Возможно, вам нужно что-то вроде следующего

struct ContentView: View {

   var fetchRequest: FetchRequest<SomeEntity>
   var items: FetchedResults<SomeEntity> { fetchRequest.wrappedValue }

   var body: some View {
      NavigationView {
         List {

            ForEach(Array(items.enumerated()), id: \.element) {(i, item) in

            NavigationLink(destination: ItemDetailsView(item: item)) {

                HStack {
                    Text("\(i + 1)")
                        .multilineTextAlignment(.center)
                        .frame(width: 60)
                    Text(item.title!)
               }
           }
           }
         }
      }
   }
}
0 голосов
/ 17 января 2020

Исходя из ваших комментариев, это должно работать: вам нужно использовать другой init из ForEach, который принимает Range<Int> в качестве первого аргумента:

ForEach(-items.count..<0, id: \.self) { i in 
    NavigationLink(destination: ItemDetailsView(item: items[-i])) {
        HStack {
            Text("\(items[-i].itemName)")
                .multiLineTextAlignment(.center)
                .frame(width: 60)
            Text("\(items[-i].title!)")
        }
    }
}

Начиная с -items.count 0 также обеспечивает обратный заказ.

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