Список в SwiftUI не отображается - PullRequest
0 голосов
/ 12 июля 2020

Сейчас я пишу код для прокручиваемого бокового календаря, который отображает даты по горизонтали. В настоящее время у меня есть следующий код (это очень упрощенная версия):

struct ScrollableCalendar: View {

    var body: some View {
        var someArray = [["May", "10", "2020"],["May", "11", "2020"],["May", "12", "2020"]]
        ScrollView(.horizontal, showsIndicators: false) {
                CalendarDateHorizBase(dates: someArray)
        }
        
    }

}


struct CalendarDateHorizBase: View {
    var dates: Array<Array<String>>
    
    var body: some View {
        HStack {
            ****THE LOGIC ERRROR OCCURS IN THIS LIST****
            List(dates, id: \.description) { date in
                    CalendarDate(month: date[0], day: date[1], year: date[2])
                
            }
        }
    }
}


*** CalendarDate () - это еще одно представление, которое принимает месяц, день и год (все строки) и красиво их отображает . Ошибка не связана с CalendarDate () ***

Когда я пытаюсь жестко закодировать элементы без списка, все отображается нормально. Однако, когда я использую Список, экран становится полностью пустым. Понятия не имею почему. У кого-нибудь есть идеи? Спасибо!

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Ваши даты должны быть правильной моделью, так как они не могут быть идентифицированы списком.

И еще я считаю, что у вас есть какая-то solid причина для использования HStack, поскольку я надеюсь, вы знаете, что этот список идет только по вертикали.

0 голосов
/ 12 июля 2020

Проблема в данных. Когда вам нужно отобразить список данных в List, каждый элемент данных должен быть Identifiable. Один из способов добиться этого - определить структуру для ваших данных и сделать ее identifiable:

struct DateEvent: Identifiable {
    let id: String

    let month: String
    let day: String
    let year: String

    init(rawValue: [String]) {
        month = rawValue[0]
        day = rawValue[1]
        year = rawValue[2]

        id = rawValue.joined(separator: "/")
    }
}

Итак, теперь вы можете использовать ее для создания List

struct CalendarDateHorizBase: View {
    var dates: [[String]] // same as 'Array<Array<String>>' but more swifty style

    var body: some View {
        HStack {
            List(dates.map { DateEvent(rawValue: $0) }) { date in
                CalendarDate(month: date.month, day: date.day, year: date.year)
            }
        }
    }
}
...