Swiftui 如何使用扩展向多个视图和控件添加相同的ViewModifier

Swiftui 如何使用扩展向多个视图和控件添加相同的ViewModifier,swiftui,Swiftui,如果我有这个视图修改器 struct AppFont: ViewModifier { var size: Int? func body(content: Content) -> some View { content.font(Font.custom("Futura", size: CGFloat(size ?? 15))) } } 由此我创建了一个扩展名,一个用于Text,一个用于Textfield extension Text { func customFont(s

如果我有这个视图修改器

struct AppFont: ViewModifier {
var size: Int?
func body(content: Content) -> some View {
    content.font(Font.custom("Futura", size: CGFloat(size ?? 15)))
}
}

由此我创建了一个扩展名,一个用于Text,一个用于Textfield

 extension Text {
    func customFont(size : Int) ->  some View {
        return ModifiedContent(content: self, modifier: AppFont(size: size))
    }
}

extension TextField {
     func customFont(size : Int) ->  some View {
           return ModifiedContent(content: self, modifier: AppFont(size: size))
       }
}

如何在不重复代码的情况下将此扩展添加到Text、Textfield和Button?因此,我可以使用文本(“hello”).customFont()文本字段(…).customFont()或Button().customFont()

将字体包装在自定义ViewModifier中,然后在扩展中再次使用它,实际上没有什么好处。我认为最好的解决方案是分别对文本进行扩展,使返回类型为Text,以便可以对其应用其他特定于文本的修饰符。您还可以在视图上有一个扩展,该扩展将覆盖所有其他场景

extension Text {

    func customFont(size : Int = 15) -> Text {

        return self.font(Font.custom("Futura",
                                     size: CGFloat(size)))
    }
}

extension View {

    func customFont(size : Int = 15) -> some View {

        return self.font(Font.custom("Futura",
                                     size: CGFloat(size)))
    }
}