SwiftUI gives us a range of built-in modifiers, such as font()
, background()
, and clipShape()
. However, it’s also possible to create custom modifiers that do something specific.
For example, we might say that all titles in our app should have a particular style, so first we need to create a custom ViewModifier
struct that does what we want:
struct Title: ViewModifier {
func body(content: Content) -> some View {
content
.font(.largeTitle)
.foregroundColor(.white)
.padding()
.background(Color.blue)
.clipShape(RoundedRectangle(cornerRadius: 10))
}
}
We can now use that with the modifier()
modifier – yes, it’s a modifier called “modifier”, but it lets us apply any sort of modifier to a view, like this:
Text("Hello World")
.modifier(Title())
When working with custom modifiers, it’s usually a smart idea to create extensions on View
that make them easier to use. For example, we might wrap the Title
modifier in an extension such as this:
extension View {
func titleStyle() -> some View {
self.modifier(Title())
}
}
We can now use the modifier like this:
Text("Hello World")
.titleStyle()
Custom modifiers can do much more than just apply other existing modifiers – they can also create new view structure, as needed. Remember, modifiers return new objects rather than modifying existing ones, so we could create one that embeds the view in a stack and adds another view:
struct Watermark: ViewModifier {
var text: String
func body(content: Content) -> some View {
ZStack(alignment: .bottomTrailing) {
content
Text(text)
.font(.caption)
.foregroundColor(.white)
.padding(5)
.background(Color.black)
}
}
}
extension View {
func watermarked(with text: String) -> some View {
self.modifier(Watermark(text: text))
}
}
With that in place, we can now add a watermark to any view like this:
Color.blue
.frame(width: 300, height: 200)
.watermarked(with: "Hacking with Swift")
SPONSORED Would you describe yourself as knowledgeable, but struggling when you have to come up with your own code? Fernando Olivares has a new book containing iOS rules you can immediately apply to your coding habits to see dramatic improvements, while also teaching applied programming fundamentals seen in refactored code from published apps.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.