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

#ios #swiftui

#iOS #свифтуи #swiftui

Вопрос:

Я хотел бы иметь возможность сказать, что мне нужен набор текстовых представлений so mamy, и чтобы они отображались в моем основном виде содержимого. Самое близкое, что я получил, это следующее: у меня есть файл под названием TextView.swift со следующим кодом:

 import SwiftUI
 
struct TextView: UIViewRepresentable {
 
    @Binding var text: String
    @Binding var textStyle: UIFont.TextStyle
 
    func makeUIView(context: Context) -> UITextView {
        let textView = UITextView()
 
        textView.font = UIFont.preferredFont(forTextStyle: textStyle)
        textView.autocapitalizationType = .sentences
        textView.isSelectable = true
        textView.isUserInteractionEnabled = true
 
        return textView
    }
 
    func updateUIView(_ uiView: UITextView, context: Context) {
        uiView.text = text
        uiView.font = UIFont.preferredFont(forTextStyle: textStyle)
     }
  }
// In content view:
struct ContentView: View {
    
    @State private var message = "this is my message in a bottle"
    @State private var textStyle = UIFont.TextStyle.body
    
    var body: some View {
        TextView(text: $message, textStyle: $textStyle)
            .padding(.horizontal)
    }    
}
  

Вместо текстового представления я хотел бы иметь HStack с 15 текстовыми представлениями внутри него.

Спасибо за вашу помощь.

Ответ №1:

вы можете просто написать функцию для возврата желаемого представления.

 struct ContentView: View {

    let numberOfTextViews = 15

    func getTextViews() -> some View {
        return HStack {
            ForEach(0..<self.numberOfTextViews, id: .self) {
                index in
                Text("this is item (index)")
                    .background(index % 2 == 0 ? Color.Red : Color.Blue)
            }
        }
    }

    var body: some View {
        self.getTextViews()
    }    
}
  

Комментарии:

1. Спасибо Мохаммаду Рахчамани, это отлично работает. Есть только небольшая опечатка ForEach(0 .. У меня есть еще один вопрос: как бы вы изменили цвет фона некоторых текстовых представлений?

2. Спасибо Мохаммаду Рахчамани, это хорошо для того, чтобы сделать 1 красным, а следующий синим. Вот еще одна проблема: у меня есть 255 плиток, т. е. сетка 15×15, и мне нужно иметь возможность определять цвет плиток в заданных позициях. Я объявил эти переменные: пусть purple = Color.purple пусть pink = Color. розовый пусть зеленый = цвет.зеленый пусть синий = Цвет. синий пусть greenPos = [3,11,36,38,45,52] пусть bluePos = [20,24,76,80,64,88,136,140,144,148,200,204] пусть redPos = [0,7,14,105,119,210,217,224] пусть purplePos = [ 16,28,32,42,48,56,64,70,154,160] Возможно ли это или я сплю?

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