Swift 编译器错误:“类型‘水印’不符合协议‘ViewModifier’”

Posted

技术标签:

【中文标题】Swift 编译器错误:“类型‘水印’不符合协议‘ViewModifier’”【英文标题】:Swift Compiler Error: "Type 'Watermark' does not conform to protocol 'ViewModifier'" 【发布时间】:2020-10-28 16:17:13 【问题描述】:

我想添加一个 ViewModifier,正如 Paul Hudson (https://www.hackingwithswift.com/books/ios-swiftui/custom-modifiers) 在以下教程中所解释的那样。 我的 ViewModifier 是:

import SwiftUI

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

但我收到以下错误:

我试图在另一个项目中重现这个,但它只是按预期工作。我已经尝试清理构建文件夹,删除派生数据,重新启动 Xcode,重新启动 Mac。

关于如何解决这个问题的任何想法?

【问题讨论】:

【参考方案1】:

我之前遇到过这个错误,正如@Asperi 所说,这是命名冲突问题。项目中可能还有另一个名称为 Content 的实体。

以及图片供参考:

The correct one

If there is another class also name Content

【讨论】:

你是对的!我在项目中两次使用了名称Content。谢谢@AlezPG! 如果您愿意,您可以在不重命名任何内容的情况下修复错误,方法是使用SwiftUI.Content 来阐明您在上面的代码中指的是哪个Content。 SwiftUI 采用了这么多没有可见命名空间的“普通”名称,这有时很烦人 Self.Content 为我解决了这个问题【参考方案2】:

我认为您有名称冲突,即。在您的项目中有另一个名为 Watermark 的实体(或从其他部分可见),因此请尝试使此修饰符唯一。喜欢

struct WatermarkModifier: ViewModifier 
 // .. other code


extension View 
    func watermarked(with text: String) -> some View 
        self.modifier(WatermarkModifier(text: text))
    
  

【讨论】:

这不会产生无效的重新声明错误吗? @JoakimDanielson,由于某种原因并非总是如此-我已经遇到过此类错误。这我试图在另一个项目中重现它,但它只是按预期工作在PO问题中让我认为它就是它。 我重命名了它,但它仍然给我 sam 错误。无论如何感谢您的回复。 @JonasDeichelmann,您能以某种方式访问​​您的项目吗? 它不是公共项目,应该是私有的。

以上是关于Swift 编译器错误:“类型‘水印’不符合协议‘ViewModifier’”的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8.2,Swift 编译器错误:错误:意外的输入文件

Swift 编译器错误命令因信号而失败:分段错误:11

Pod 安装错误后,Swift 3 结果出现编译错误

安装 Xcode10.2.1 但仍然收到错误“使用 Swift 5.0.1 编译的模块无法由 Swift 5.1 编译器导入”

Swift 编译器错误,由于信号导致命令失败:分段错误:11

swift编译器显示预期的声明错误? [复制]