SwiftUI: как преобразовать массив строк в текст

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

Мое состояние установлено как

 businessHours = : [
    "Monday: 7:00 AM – 7:00 PM",
    "Tuesday: 7:00 AM – 7:00 PM",
    "Wednesday: 7:00 AM – 7:00 PM",
    "Thursday: 7:00 AM – 7:00 PM",
    "Friday: 7:00 AM – 7:00 PM",
    "Saturday: 7:00 AM – 7:00 PM",
    "Sunday: Closed"
 ]

Это дает мне только первый элемент из массива

ForEach(businessHours.indices) {
    Text(self.businessHours[$0])
}

Это не удается

ForEach(businessHours.indices) {
    Text(self.businessHours)
}

Это работает в консоли

for businesshour in businessHours {
print("Hours: \(businesshour).")
}

Что я здесь делаю не так?

3 ответа

Есть гораздо более простой способ..

Когда у вас есть массив, в котором значения разделены ",", вы можете разделить массив с помощью этого символа запятой

Например: у меня есть модель пользователя с едой. Food — это массив, который выглядит примерно так:

      user.food = ["Banana", "Strawberry", "Apple"]

Вы заметили: каждый элемент отделяется запятой.

Теперь вы можете просто использовать

      Text(user.food.joined(separator: ", "))
   .multilineTextAlignment(.trailing)
   .padding()

И вуаля :)

Вот демо, которое работает. Протестировано с Xcode 12 / iOS 14

       struct DemoView: View {
    let businessHours = [
         "Monday: 7:00 AM – 7:00 PM",
         "Tuesday: 7:00 AM – 7:00 PM",
         "Wednesday: 7:00 AM – 7:00 PM",
         "Thursday: 7:00 AM – 7:00 PM",
         "Friday: 7:00 AM – 7:00 PM",
         "Saturday: 7:00 AM – 7:00 PM",
         "Sunday: Closed"
     ]

    var body: some View {
        VStack {
            ForEach(businessHours.indices) {
                 Text(self.businessHours[$0])
            }
        }
    }
}

Я понял.

(0..<businessHours.count, id: \.self) { index in
       Text(self.businessHours[index])
}
Другие вопросы по тегам