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 编译器错误:错误:意外的输入文件
安装 Xcode10.2.1 但仍然收到错误“使用 Swift 5.0.1 编译的模块无法由 Swift 5.1 编译器导入”