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

时间:2017-07-01 06:55:42

标签: swift swift4

当我在执行no no项时遇到错误时,我正在本文(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]()

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

这段代码完全适用于Swift 3.我认为没有理由不应该在Swift 4上工作。如果在处理相关类型方面改变了Swift 4,有人可以帮助我吗?那么,实例化数组的替代方法是什么。

1 个答案:

答案 0 :(得分:3)

在Swift 4中,protocol Sequence已经定义了

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

所以你可以删除

typealias Element = Self.Iterator.Element

让它编译。<​​/ p>