初始化两个元组的数组失败

时间:2015-06-02 20:45:01

标签: ios swift

我有一个简单的函数,它返回一个元组数组

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)] = []

怎么回事?

我已经读过,最好通过初始化数组并允许隐式类型推断来声明数组。

3 个答案:

答案 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);
    });
});