私は初心者です。スイフト学習者です。プロトコルに関する質問があります。私は以下のとおりであるリンクリストについてお教えチュートリアルを、続いている:実際にプロトコルに準拠していないプロトコル機能の実装
ノード:
class LinkedListNode<Key> {
let key: Key
var next: LinkedListNode?
weak var previous: LinkedListNode?
init (key: Key) {
self.key = key
}
}
とリンクリスト:
class LinkedList<Element>: CustomStringConvertible {
typealias Node = LinkedListNode<Element>
private var head: Node?
// irrelevant code removed here
var description: String {
var output = "["
var node = head
while node != nil {
output += "\(node!.key)"
node = node!.next
if node != nil { output += ", " }
}
return output + "]"
}
}
var description: String
実装は単にあなたが印刷することができますリンクされたリストの各要素
これまでのところ、私はリンクされたリストの構造を理解しています、私の問題は実際にリンクされたリストに関するものではありません。私が理解できないのは、プロトコルCustomStringConvertible
です。プロトコルに準拠せずにvar description: String
実装のみを使用すると、なぜ間違っていますか?私は、このプロトコルは単に "とにかく、あなたは私に準拠しているので、var description: String
を実装する必要がありますが、プロトコルに準拠しないでvar description: String
を実装するだけですか?
バックグラウンドでタイプCustomStringConvertible
に取り、いくつかのコードを介して実行して出来上がり!テキストが表示されます関数またはいくつかの並べ替えがある。
私はあなたの質問を完全に理解しているかどうかはわかりません。なぜ、タイプがただちに要件のすべてを実装した場合、タイプがプロトコルに暗黙的に準拠していないのか尋ねていますか?ほとんどのプロトコルには特定のセマンティクス要件があるため、これが当てはまらない良い理由があります。例えば、 'Error'プロトコルは* no *の要件を持っていますが、*は*すべての型がエラーであることを意味しません。 – Hamish
[Protocols is Syntax of Bags](https://oleb.net/blog/2016/12/protocols-have-semantics/) – Hamish