我有一个协议,用于定义构成笔记内容的内容。一个便笺可以有许多不同的内容类型,因此协议似乎是最好的方法。
public protocol Content {
var contentType: String { get }
}
然后我有该协议的实现
public class PlainTextContent: Content {
public var contentType: String {
return "Plain Text"
}
public var text: String = String()
public init(content: String) {
self.text = content
}
}
这是两个对象的简化示例。接下来我有一个Note
包含协议实现Array
的类。Content
public class Note {
public private(set) var noteContent: [Content] = []
public var title: String = String()
public var date: NSDate
public init() {
self.date = NSDate()
}
func insertContent(content: Content) -> Bool {
if contains(self.noteContent, content) {
return false
}
self.noteContent.append(content)
return true
}
func deleteContent(content: Content) -> Bool {
return false
}
}
我遇到的问题是,当我这样做时
if contains(self.noteContent, content) {}
编译器告诉我
Note.swift:21:12:找不到接受类型为“([内容],内容)”的参数列表的“包含”的重载
我在Stackoverflow上查看了一些示例,并且正在按照他们的说明进行操作。我如何定义协议以便将其用作数组和相关的全局函数是否存在问题?
编辑
我还尝试使协议继承自Equatable
,此时我收到以下编译器错误
协议“内容”只能用作通用约束,因为它具有自身或相关类型要求
对于如何对协议数组执行相等性检查,我有点困惑。这是 Swift 不支持的东西吗?我来自 C# 背景,所以不确定 Swift 如何完全处理协议。