2017-09-04 4 views
3

Warum funktionierts, wo ein Seitenumbruch NSManagedObject istWarum kann ich in meiner Sequence-Erweiterung keine typspezifischen Informationen erhalten?

extension Sequence where Iterator.Element : PageBreak { 

    var landscape: [PageBreak] { 
     return self.filter({ (pageBreak) -> Bool in 
      return !pageBreak.isPortraitOrientation 
     }) 
    } 

    var portrait: [PageBreak] { 
     return self.filter({ (pageBreak) -> Bool in 
      return pageBreak.isPortraitOrientation 
     }) 
    } 
} 

Aber nicht dies:

extension Sequence where Iterator.Element : String { 
    var onlyDumbOnes: [String] { 
     return self.filter({ (string) -> Bool in 
      if string.hasPrefix("Dumb") { 
       return true 
      } 
      return false 
     }) 
    } 
} 

Der Compiler schlägt fehl. Value of type 'Self.Iterator.Element' has no member 'hasPrefix'

So scheint es nicht zu wissen, dass es sich um String-Objekte handelt.

Antwort

4

String ist ein struct und keine class oder ein , so dass die Syntax Iterator.Element : String macht keinen Sinn, da Iterator.Element nicht eine Unterklasse von String sein kann oder die String implementieren. Verwenden Sie stattdessen Iterator.Element == String:

extension Sequence where Iterator.Element == String { 
    var onlyDumbOnes: [String] { 
     return self.filter { (string) -> Bool in 
      if string.hasPrefix("Dumb") { 
       return true 
      } 
      return false 
     } 
    } 
} 
+0

Das ist der Weg! Richtig. – horseshoe7

Verwandte Themen