メモの内容を構成するものを定義するために使用しているプロトコルがあります。メモにはさまざまな種類のコンテンツを含めることができるため、プロトコルが最適な方法のように思われました。
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
}
}
これは、2 つのオブジェクトの単純化された例です。次に、プロトコルの実装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: タイプ '([Content], Content)' の引数リストを受け入れる 'contains' のオーバーロードが見つかりません
私はStackoverflowでいくつかの例を見てきましたが、それらが示すようにやっています。プロトコルを配列および関連するグローバル関数として使用するためにプロトコルを定義する方法に問題はありますか?
編集
また、プロトコルを から継承しようとしましたが、Equatable
その時点で次のコンパイラ エラーが発生します。
プロトコル 'Content' は、Self または関連する型の要件があるため、一般的な制約としてのみ使用できます
一連のプロトコルに対して等価性チェックを実行する方法について、少し混乱しています。それはSwiftがサポートしていないものですか?私は C# のバックグラウンドを持っているので、Swift がプロトコルを完全に処理する方法がわかりません。