2015-06-18 51 views
0

以前,當你想看看你的Swift字符串是否包含另一個字符串時,你可以將它轉換爲NSString並調用.containsString。蘋果以他們的無限智慧提出了這個版本的意識,所以如果你在S2下試用它,即使你的目標平臺確實支持它(我認爲是一個bug),它也會要求一個#available包裝器。.containsString在Swift 2中?

+1

爲什麼不使用'rangeOfString()'而沒有橋接到'NSString'?這適用於所有當前的Swift版本。 –

回答

1

所以最好的解決問題的方法是這樣的:

extension String { 
    func contains(substr: String) -> Bool { 
     if #available(OSX 10.10, *) { 
      return NSString(string: self).containsString(substr) 
     } else { 
      return self.rangeOfString(substr) != nil 
     } 
    } 
} 

,現在要檢查它,而不是這樣的:

if NSString(string: line).containsString(" ")... 

你使用太多更好看:

if line.contains(" ")... 

這不再抱怨版本,(恕我直言)看起來更好。幾乎可以確定你想要這個太:

extension String { 
    var length: Int { 
     return self.characters.count 
    } 
} 

蘋果不斷變化的你長的路,我希望未來的API的變化將是#available -able,在這一點.length可以輕鬆地修改。這些只是爲了理智:

extension String { 
    subscript (r: Range<Int>) -> String { 
     get { 
      let subStart = advance(self.startIndex, r.startIndex, self.endIndex) 
      let subEnd = advance(subStart, r.endIndex - r.startIndex, self.endIndex) 
      return self.substringWithRange(Range(start: subStart, end: subEnd)) 
     } 
    } 
    func substring(from: Int) -> String { 
     let end = self.characters.count 
     return self[from..<end] 
    } 
    func substring(from: Int, length: Int) -> String { 
     let end = from + length 
     return self[from..<end] 
    } 
} 

extension String { 
    func trim() -> String { 
     return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 
    } 
    func trim(withSet: NSCharacterSet) -> String { 
     return self.stringByTrimmingCharactersInSet(withSet) 
    } 
} 
+0

各種基於整數的下標方法也已發佈在http://stackoverflow.com/questions/24092884/get-nth-character-of-a-string-in-swift-programming-language的答案中。 –