2017-07-01 83 views
2

我碰到這篇文章時正在對Xcode 9 beta 2 Swift 4進行一些練習(https://www.uraimo.com/2016/01/06/10-Swift-One-Liners-To-Impress-Your-Friends/)產品編號時發生錯誤。 6:Swift 4:在實例化關聯類型數組時,無法調用非函數類型'[Self.Element.Type]'的值

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在處理相關類型方面的變化嗎?如果是的話,什麼是替代實例化數組。

回答

3

在斯威夫特4,protocol Sequence已經定義了

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

,所以你可以只取出

typealias Element = Self.Iterator.Element 

,使其編譯。

相關問題