V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
arbipher
V2EX  ›  Swift

swift 新建泛型数组的问题

  •  
  •   arbipher · 2015-09-26 15:54:53 +08:00 · 4070 次点击
    这是一个创建于 3354 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题来自官方网站的 例子

    页面上方提供 Playground 的下载。我的问题是页面上的一个练习,在页面最下方

    Modify the anyCommonElements(_:_:) function to make a function that returns an array of the elements that any two sequences have in common.

    我尝试新建泛型数组的方法是

    var result  = [T.Generator.Element]()
    

    会报编译错误: invalid use of '()' to call a value of non-function type '[T.Generator.Element.Type]'

    stackoverflow 上搜到了这个问题的 解答。我写在下面代码的注释里。

    func commonElements <T: SequenceType, U: SequenceType where T.Generator.Element: Equatable, T.Generator.Element == U.Generator.Element> (lhs: T, _ rhs: U) -> Bool {
    
    //  以下三行,前两行是 stackoverflow 提供的方法,单独都 work 。第三行是我的方法,会报错。
    //  var result = Array<T.Generator.Element>()
    //  var result: [T.Generator.Element] = []
        var result  = [T.Generator.Element]()
    
        for lhsItem in lhs {
            for rhsItem in rhs {
                if lhsItem == rhsItem {
                    result.append(lhsItem)
                }
            }
        }
        return false
    }
    
    commonElements([1, 2, 3], [2, 3])  // result is [2, 3]
    

    在另一份官方页面里提到

    Array Type Shorthand Syntax

    The type of a Swift array is written in full as Array<Element>, where Element is the type of values the array is allowed to store. You can also write the type of an array in shorthand form as [Element]. Although the two forms are functionally identical, the shorthand form is preferred and is used throughout this guide when referring to the type of an array.

    这里提到 Array<Element>和[Element]是等价的。那么 Array<T.Generator.Element>和[T.Generator.Element]也应该是等价的。

    为什么我的语句会报错呢?不知道问题出在哪里。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:00 · PVG 17:00 · LAX 01:00 · JFK 04:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.