Как я могу изменить каждое содержимое внутри фигурных скобок CustomView отдельно в SwiftUI?

#swiftui

#swiftui

Вопрос:

Как я могу изменить каждое содержимое внутри фигурных скобок CustomView отдельно, в коде down я изменяю смещение содержимого, которое работает нормально, но оно применяется ко всему содержимому CustomView, а затем принимает следующий индекс EachFor и делает то же самое. Что правильно и выполняет свою работу!

Моя цель в этом вопросе — найти способ указать CustomView изменять один за другим, а не все вместе!

PS: моей целью использования CustomView было / является предоставление мне возможности изменять код в contentView. Я хочу просто загрузить свое содержимое внутри фигурных скобок CustomView, и все изменения происходят внутри CustomView. и это CustomView может принимать любой вид / содержимое.

мое целевое выходное изображение:

введите описание изображения здесь

 struct ContentView: View {
        var body: some View {
            
            CustomView {
                Text("Hello, world! 1")
                Text("Hello, world! 2")
                Text("Hello, world! 3")
                Text("Hello, world! 4")
                Text("Hello, world! 5")
            }
        }
    }
    
struct CustomView<Content: View>: View {
        
        var inPutView: () -> Content
        
        init(@ViewBuilder inputView: @escaping () -> Content) {
            self.inPutView = inputView
        }
        
        var body: some View
        {
            VStack {
                
                ForEach(0..<5) { index in
                    inPutView().offset(x: CGFloat(index*20))
                }
                
            }
        }
 }
 

вывод этого кода:

введите описание изображения здесь

Обновить:

     struct ContentView: View {
    var body: some View {
        
        CustomView {
            Text("Hello")
            Image(systemName: "folder")
            Text("Omid")
            Image(systemName: "star")
            Circle().fill(Color.red).frame(width: 10, height: 10, alignment: .center)
            HStack { Image(systemName: "person"); Image(systemName: "1.circle").foregroundColor(Color.green) }
        }
    }
}

struct CustomView<Content: View>: View {
    
    var inPutView: () -> Content
    
    init(@ViewBuilder inputView: @escaping () -> Content) {
        self.inPutView = inputView
    }
    
    var body: some View
    {
        VStack {
            
            ForEach(0..<5) { index in
                inPutView().offset(x: CGFloat(index*20))
            }
            
        }
    }
}
 

введите описание изображения здесь

Ответ №1:

Мне кажется, это возможный подход к решению таких задач. По крайней мере, способ перемещения…

Протестировано с Xcode 12.1 / iOS 14.1.

ДЕМОНСТРАЦИЯ

 struct ContentView: View {
    var body: some View {
        CustomView(5) {
            Text("Hello, world! ($0   1)")
        }
    }
}

struct CustomView<Content: View>: View {
    private var count: Int
    var inPutView: (Int) -> Content
    
    init(_ count: Int = 1, @ViewBuilder inputView: @escaping (Int) -> Content) {
        self.count = count
        self.inPutView = inputView
    }
    
    var body: some View {
        VStack {
            ForEach((0..<count).indices, id: .self) { index in
                inPutView(index).offset(x: CGFloat(index*20))
            }
        }
    }
}
 

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

1. моей целью использования CustomView было / является предоставление мне возможности изменять код в contentView. Я хочу просто загрузить свое содержимое внутри фигурных скобок CustomView, и все изменения происходят внутри CustomView. и это CustomView может принимать любой вид / содержимое. пожалуйста, посмотрите мое обновление в коде.