gpt4 book ai didi

swift - 协议(protocol)功能实现,实际上不符合协议(protocol)

转载 作者:行者123 更新时间:2023-11-28 15:40:41 26 4
gpt4 key购买 nike

我是 Swift 初学者,我有一个关于协议(protocol)的问题。我遵循了一个教你关于链表的教程,如下所示:

节点:

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 协议(protocol)。如果我只有 var description: String 实现而不符合协议(protocol),为什么会出错?我的意思是,这个协议(protocol)只是简单地说“嘿,你需要实现 var description: String 因为你符合我的要求,但为什么我们不能只实现 var description: String 不符合协议(protocol)?

是不是因为在后台,有一个函数或某种类型接受类型 CustomStringConvertible 并通过一些代码运行它,瞧!文本出现。

最佳答案

为什么我们不能在不符合协议(protocol)的情况下实现 var description: String

比较:

class Foo {
var description: String { return "my awesome description" }
}

let foo = Foo()

print("\(foo)") // return "stackoverflow.Foo" (myBundleName.Foo)

class Foo: CustomStringConvertible {
var description: String { return "my awesome description" }
}

let foo = Foo()

print("\(foo)") // return "my awesome description"

当你使用CustomStringConvertible时,你保证这个类有变量description,然后你可以调用它,而无需知道其他实现细节。

另一个例子:

(someObject as? CustomStringConvertible).description

我不知道 someObject 的类型,但是,如果它订阅了 CustomStringConvertible,那么,我可以调用 description

关于swift - 协议(protocol)功能实现,实际上不符合协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43740665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com