2017-09-04 47 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

相關問題