2017-09-04 45 views
3

为什么这项工作,其中分页符是一个NSManagedObject为什么我无法在序列扩展中获取特定于类型的信息?

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

但不是这样的:

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

编译器失败。 Value of type 'Self.Iterator.Element' has no member 'hasPrefix'

所以它似乎并不知道我们正在处理字符串对象。

回答

4

Stringstruct而不是class或,所以语法Iterator.Element : String没有意义,因为Iterator.Element不能成为String一个子类或实现 String。相反,使用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

就是这样!正确。 – horseshoe7

相关问题