是否可以编写一个函数以组成任意数量的SwiftUI`ViewModifier's?

问题描述 投票:2回答:1

请考虑以下将填充应用于特定ViewModifierView

enum Padding {
    case small
    case medium
    case large
}

private struct PaddingModifier: ViewModifier {
    var edgeSet: Edge.Set = .all
    var size: Padding

    func body(content: Content) -> some View {
        return content.padding(edgeSet, getSize())
    }

    func getSize() -> CGFloat {
        switch size {
        case .small:
            return 2
        case .medium:
            return 8
        case .large:
            return 16
        }
    }
}

[为了使ViewModifier更具可读性,通常我会在View中添加扩展功能

extension View {
    func padding(_ size: Padding, _ set: Edge.Set = .all) -> some View {
        return modifier(PaddingModifier(edgeSet: set, size: size))
    }
}

但是,我想将此修饰符应用于Edge.Set值的任意列表。如何编写带有将每个(Padding, [Edge.Set]) -> some View都应用PaddingModifier的签名Edge.Set的函数?

[我的最初想法是类似下面的内容,但是Self无法符合some View

extension View {
    func padding(_ size: Padding, _ set: Edge.Set = .all) -> some View {
        return modifier(PaddingModifier(edgeSet: set, size: size))
    }

    func padding(_ size: Padding, _ set: [Edge.Set]) -> some View {
        set.reduce(self) { $0.padding(size, $1) }
    }
}
swift swiftui composition
1个回答
1
投票
© www.soinside.com 2019 - 2024. All rights reserved.