SwiftUI: пользовательский модификатор представления не соответствует ViewModifier?
Я пытаюсь создать этот модификатор:
struct CustomTextBorder: ViewModifier {
func body(content: Content) -> some View {
return content
.font(.largeTitle)
.padding()
.overlay(
RoundedRectangle(cornerRadius: 15)
.stroke(lineWidth: 2)
)
.foregroundColor(.blue)
}
}
Когда я это сделаю, я получаю
Type 'CustomTextBorder' does not conform to protocol 'ViewModifier'
ошибка.
Кажется, я должен добавить:
typealias Body = <#type#>
Тем не менее, я вижу, что модификаторы создаются так же, как и здесь изначально, без необходимости указывать
typealias Body...
Этот модификатор работает здесь:
https://www.simpleswiftguide.com/how-to-make-custom-view-modifiers-in-swiftui/
Почему у меня не работает?
Как заставить работать этот модификатор? Почему для одних это работает, а для других нет? Зависит ли это от того, на что нацелен проект? Я ориентируюсь на iOS 15.
2 ответа
Не видя вашей реализации, похоже, что вы не инициализируете модификатор. Убедитесь, что вы используете фигурные скобки в конце
CustomTextBorder()
. Помните, что это все еще функция, которую необходимо вызвать.
Text("SwiftUI Tutorials")
.modifier(CustomTextBorder())
То же самое, если вы делаете расширение
View
extension View {
func customTextBorder() -> some View {
return self.modifier(CustomTextBorder())
}
}
Ваш код работает нормально, но почему ViewModifier? вам не нужен ViewModifier для этой простой вещи, вы можете использовать расширение следующим образом:
struct ContentView: View {
var body: some View {
Text("Hello, World!").customTextBorder
}
}
extension Text {
var customTextBorder: some View {
return self
.font(.largeTitle)
.padding()
.overlay(
RoundedRectangle(cornerRadius: 15)
.stroke(lineWidth: 2)
)
.foregroundColor(.blue)
}
}