Created
November 7, 2023 18:01
-
-
Save moyerr/85995c4ee21184853703975985a26bce to your computer and use it in GitHub Desktop.
Apply a modifier to a view repeatedly with a recursive modifier
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
struct RecursiveModifier<Data: Collection, Transformed: View>: ViewModifier { | |
let data: Data | |
let transform: (Data.Element, AnyView) -> Transformed | |
func body(content: Content) -> some View { | |
var subsequence = data[...] | |
if let first = subsequence.popFirst() { | |
transform(first, AnyView(content)) | |
.forEach(subsequence, transform: transform) | |
} else { | |
content | |
} | |
} | |
} | |
extension View { | |
func forEach<Data: Collection, Transformed: View>( | |
_ data: Data, | |
@ViewBuilder transform: @escaping (Data.Element, AnyView) -> Transformed | |
) -> some View { | |
modifier(RecursiveModifier(data: data, transform: transform)) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment