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