我有一个简单的函数,它返回一个元组数组
func findNodeNeighbors(node: Node) -> [(node: Node, distance: Double)] {
var neighbors = [(node: Node, distance: Double)]()
var nodeLinks = linksWith(node)
for link in nodeLinks {
neighbors.append((node: link.otherNodeLinkedWith(node), distance: link.length))
}
return neighbors
}
但结果却是函数体第一行的错误Invalid use of () to call a clue of non-function type
。
如果我明确声明neighbors
的类型,一切都很好。
var neighbors: [(node: Node, distance: Double)] = []
怎么回事?
我已经读过,最好通过初始化数组并允许隐式类型推断来声明数组。
答案 0 :(得分:4)
非常肯定这是Swift解析器中的一个错误,特别是与[Type]
糖结合命名元组。
var neighbors = Array<(node: Node, distance: Double)>()
(应该与[(node: Node, distance: Double)]()
相同)可以正常工作。
编辑:看起来像字典等价有相同的问题
工作正常:
var d = Dictionary<Int,(x: Int, y: Int)>()
猛击:
var d = [Int:(x: Int, y: Int)]()
答案 1 :(得分:2)
如果我想要一个空数组作为初始值怎么办?
我不是百分百肯定 - 但我认为你现在能够快速解决这个问题的另一种方法是使用typealias
声明元组。
例如:
typealias Test = (Node, Double)
func findNodeNeighbors(node: Node) -> [Test] {
var neighbors = [Test]()
//etc
}
答案 2 :(得分:0)
您应该使用默认值初始化数组:
var H4 = document.getElementsByClassName("test"), act;
[].forEach.call(H4, function(el){
el.addEventListener("click", function(){
if(act) act.classList.remove("active");
return (this.classList.toggle("active"), act=this);
});
});