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

时间:2019-10-29 07:51:48

标签: swiftui

如果我有这个ViewModifier。

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?所以我可以使用Text(“ hello”)。customFont()TextField(...)。customFont()或Button()。customFont()

1 个答案:

答案 0 :(得分:1)

通过将字体包装在自定义ViewModifier中,然后在扩展名中再次使用它,实际上并没有任何收获。我认为最好的解决方案是分别在Text上具有扩展名,以将返回类型设置为Text,以便可以对它应用其他特定于文本的修饰符。您还可以在View上使用扩展程序,以涵盖所有其他情况。

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)))
    }
}