如果我有这个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()
答案 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)))
}
}