简体   繁体   中英

How can I feed ForEach with items of TupleView in SwiftUI?

I am trying to build a custom view which adds space between each content of TupleView, here is my pseudocode until now? What I should do more in codes to make it happen?

struct CustomSpacerView<Content1: View, Content2: View, Content3: View>: View {
    
    @ViewBuilder let content: () -> TupleView<(Content1, Content2, Content3)>
    
    var body: some View {

        ForEach(Array(arrayLiteral: content().value).indices, id:\.self) { index in
            
            Spacer()
            
            content().value.index
            
        }
        
        Spacer()
 
    }
    
}

use case:

struct ContentView: View {
    var body: some View {

        CustomSpacerView {

            Text("Hello, World!")
            
            Text("Hello, World!")
            
            Text("Hello, World!")
            
        }

    }
}

You don't need ForEach for tuples, because all values are defined, so here is a demo of possible approach.

Tested with Xcode 13.1 / iOS 15

演示1在此处输入图像描述

struct ContentView: View {
    var body: some View {

        VStack {
            CustomSpacerView {
                Text("Hello, World!")
                Text("Hello, World!")
                Text("Hello, World!")
            }
        }
        HStack {
            CustomSpacerView {
                Text("Hello, World!")
                Text("Hello, World!")
                Text("Hello, World!")
            }
        }

    }
}

struct CustomSpacerView<Content1: View, Content2: View, Content3: View>: View {

    @ViewBuilder let content: () -> TupleView<(Content1, Content2, Content3)>

    var body: some View {
        let value = content().value
        value.0
        Spacer()
        value.1
        Spacer()
        value.2
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM