SwiftUI:自定义视图修饰符不符合ViewModifier要求?

4
我正在尝试创建这个修饰符:
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。

这段代码对我来说运行良好。 - Taeeun Kim
2个回答

3

没有看到你的具体实现,看起来好像你没有初始化这个修改器。确保在结尾处使用 CustomTextBorder() 大括号。记住,它仍然是需要被调用的函数。

Text("SwiftUI Tutorials")
  .modifier(CustomTextBorder())

如果您正在制作View的扩展,也是一样的。

extension View {
  func customTextBorder() -> some View {
    return self.modifier(CustomTextBorder())
  }
}

错误消息略有变化,现在它说“_CustomTextBorder.Type_”...回想起来,显而易见。传递类型是不行的,传递实例就可以了。 - green_knight

0
你的代码运行得很好,但为什么要使用ViewModifier?对于这个简单的事情,你不需要使用ViewModifier,可以用扩展(extension)来实现:
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)
        
    }
    
}

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接