Swiftui 迅捷可以';自定义图像修改器时是否直接调用修改器?

Swiftui 迅捷可以';自定义图像修改器时是否直接调用修改器?,swiftui,Swiftui,我正在尝试自定义图像修改器,就像文本修改器一样: struct FlagImage: ViewModifier { func body(content: Content) -> some View { content .renderingMode(.original) .clipShape(Capsule()) .overlay(Capsule().stroke(Color.black,

我正在尝试自定义图像修改器,就像文本修改器一样:

    struct FlagImage: ViewModifier {
    func body(content: Content) -> some View {
        content
            .renderingMode(.original)
            .clipShape(Capsule())
            .overlay(Capsule().stroke(Color.black, lineWidth: 1))
            .shadow(color: .black, radius: 2)
        }
}
第一个错误是

Value of type 'FlagImage.Content' (aka '_ViewModifier_Content<FlagImage>') has no member 'renderingMode'

Cannot infer contextual base in reference to member 'original'
为什么图像修改器内容不能直接调用.renderingMode(.original)?
如何解决此问题?

ViewModifier
是视图的修饰符,它是通用视图,因此它的内容在某些通用视图中也是不透明的,您无法对其应用特定的修饰符,如
Image.renderingMode

解决方案是将函数修饰符直接添加到扩展中的图像,如

extension Image {
    func flagImage() -> some View {
        self
            .renderingMode(.original)
            .clipShape(Capsule())
            .overlay(Capsule().stroke(Color.black, lineWidth: 1))
            .shadow(color: .black, radius: 2)
    }
}
使用Xcode 11.4/iOS 13.4进行测试

extension Image {
    func flagImage() -> some View {
        self
            .renderingMode(.original)
            .clipShape(Capsule())
            .overlay(Capsule().stroke(Color.black, lineWidth: 1))
            .shadow(color: .black, radius: 2)
    }
}