2017-07-01 3 views
2

Ich habe einige Übungen auf Xcode 9 Beta 2 Swift 4 aus diesem Artikel (https://www.uraimo.com/2016/01/06/10-Swift-One-Liners-To-Impress-Your-Friends/), wenn ich gestoßen bin ein Fehler beim Ausführen von Artikel-Nr. 6:Swift 4: Kann nicht Wert von Nicht-Funktion Typ '[Self.Element.Type]' beim Instanziieren zugeordneten Typ Array

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 ist ein Fehler in den folgenden Zeilen werfen:

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

Der vollständige Fehler ist unten:

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

der Fehler bestehen bleibt, auch wenn ich die typealias entfernen, und Verwenden Sie den vollständigen Self.Iterator.Element Typ.

Dieser Code funktioniert perfekt auf Swift 3. Ich sehe keinen Grund, warum es nicht auf Swift 4 funktionieren sollte. Kann mir jemand helfen, wenn es eine Änderung in Swift 4 in Bezug auf die Handhabung verbundenen Typen ist und wenn ja, was ist das? Alternative zur Instanziierung des Arrays.

Antwort

3

In Swift 4, protocol Sequence bereits definiert die

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

so können Sie einfach die

typealias Element = Self.Iterator.Element 

entfernen, um es zu kompilieren zu machen.

Verwandte Themen