2017-09-04 3 views
3

Pourquoi ce travail, où PageBreak est un NSManagedObjectPourquoi ne puis-je pas obtenir des informations spécifiques au type dans mon extension Sequence?

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 
     }) 
    } 
} 

Mais pas:

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

Le compilateur échoue. Donc, il ne semble pas savoir que nous avons affaire à des objets String.

Répondre

4

String est un struct et non un class ou un , de sorte que la syntaxe Iterator.Element : String n'a pas de sens puisque Iterator.Element ne peut pas être une sous-classe de String ou mettre en œuvre la String. Au lieu de cela, utilisez 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

C'est le chemin! Correct. – horseshoe7