数组初始化的短期和长期形式之间的有效差异

时间:2015-12-06 14:26:26

标签: arrays swift

Swift Guided Tour内的最后一项实验要求读者:

  

修改anyCommonElements(_:_ :)函数以生成一个函数   返回任意两个序列所包含的元素数组   常见的。

我修改的第一个快速通道:

func anyCommonElements <T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> [T.Generator.Element] {
    var commonElements = [T.Generator.Element]()
    for lhsItem in lhs {
        for rhsItem in rhs {
            if lhsItem == rhsItem {
                commonElements.append(lhsItem)
            }
        }
    }
    return commonElements
}

我收到与Xcode 7.1.1中第2行的数组commonElements初始化相关的错误:

  

无效使用'[]'来调用非函数类型的值   '[T.Generator.Element.Type]'

但是,如果我只是简单地更改初始化以使用在第2行创建空数组的缩写形式,一切都可以正常运行且没有错误:

func anyCommonElements <T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> [T.Generator.Element] {
    var commonElements = Array<T.Generator.Element>() // Longhanded empty array
    for lhsItem in lhs {
        for rhsItem in rhs {
            if lhsItem == rhsItem {
                commonElements.append(lhsItem)
            }
        }
    }
    return commonElements
}

the Swift documentation中声明:

  

Swift数组的类型全部写为Array<Element>,其中   Element是允许存储数组的值的类型。您可以   还以简写形式将数组类型写为[Element]。   虽然两种形式功能相同,但速记形式   是优选的,并且在参考本指南时使用   数组的类型。

(强调补充。)

如果它们“在功能上相同”,为什么我在上面的第一个例子中收到错误,显然是因为我用简写形式创建一个空数组?或者 - 或许更有可能 - 我是否缺乏对手头问题的基本了解?

0 个答案:

没有答案