Swift 4: 实例化关联类型数组时无法调用非函数类型 '[Self.Element.Type]' 的值

Swift 4 : Cannot call value of non-function type '[Self.Element.Type]' when instantiating associated type array

我在这篇文章 (https://www.uraimo.com/2016/01/06/10-Swift-One-Liners-To-Impress-Your-Friends/) 的 Xcode 9 beta 2 Swift 4 上做了一些练习,当我在做项目编号时遇到错误。 6:

extension Sequence{
   typealias Element = Self.Iterator.Element 

   func partitionBy(fu: (Element)->Bool)->([Element],[Element]){
       var first=[Element]() 
       var second=[Element]() 
       for el in self {
          if fu(el) { 
             first.append(el) 
          }else{ 
             second.append(el) 
          } 
       } 
       return (first,second) 
   } 
}

Xcode 9 在以下行中抛出错误:

   var first=[Element]() 
   var second=[Element]() 

完整错误如下:

error: Swift-Playground.playground:6:29: error: cannot call value of non-function type '[Self.Element.Type]'
        var second=[Element]()

即使我删除类型别名并使用完整的 Self.Iterator.Element 类型,错误仍然存​​在。

此代码在 Swift 上完美运行 3. 我看不出它为什么不能在 Swift 上运行 4. 如果 Swift 有变化,有人可以帮我吗4 在处理关联类型方面,如果是,实例化数组的替代方案是什么。

在Swift4中,protocol Sequence已经定义了

associatedtype Element where Self.Element == Self.Iterator.Element

所以你可以删除

typealias Element = Self.Iterator.Element

编译。