gpt4 book ai didi

swift - Swift 泛型类型可以在初始时推断出来吗?

转载 作者:行者123 更新时间:2023-11-30 10:15:52 28 4
gpt4 key购买 nike

//generic queue data object
class QNode<T> {
var key: T? = nil
var next: QNode? = nil
}

public class Queue<T> {
//Q1
private var top: QNode<T>! = QNode<T>()
//enqueue the specified object
func enQueue(var key: T) {
//check for the instance
if (top == nil) {
//Q2
top = QNode()
}
//establish the top node
if (top.key == nil) {
top.key = key
return
}
var childToUse: QNode<T> = QNode<T>()
var current: QNode = top
//cycle through the list of items to get to the end.
while (current.next != nil) {
current = current.next! }
//append a new item
childToUse.key = key
current.next = childToUse
}
}

如果将 Q1 更改为私有(private) var top: QNode! = QNode() 会提示错误“无法推断泛型参数'T'的参数”,但在原始代码中 Q2 工作正常,没有错误?

最佳答案

这里有一些有趣的行为,因为虽然由于类型推断确实如此:

var top: QNode<String> = QNode()

与书写相同

var top: QNode<String> = QNode<String>()

或者确实

var top: QNode = QNode<String>()

使用 ! 进行隐式解包编译器会产生一些不寻常的行为,尽管它告诉我们它会解释

private var top: QNode! = QNode<T>()

属于 QNode<T>! 类型如果我们按住变量名称,实际上它的行为会有所不同:

private var top: QNode<T>! = QNode<T>()

 private var top: QNode<T>! = QNode()

编译器中的这种困惑在我看来就像一个错误,因为它应该要么处理 QNode!QNode<T>!或者完全拒绝它。幸运的是,意识到这个错误后,您可以通过简单地使用 QNode<T>! 来解决它。 .

我也会向 Apple 提交此错误,尽管我无法单独重现此错误,并且会在有机会时仔细查看。

关于swift - Swift 泛型类型可以在初始时推断出来吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30035639/

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