原文:How To Find A Substring In Range of a Swift Stringswift
Swift中的Ranges和Objective-C中的NSRange有很大的不一樣,我發如今處理Swift中Ranges相關的問題的時候,老是要花費比我想象的更多的時間。不過,如今回過頭來看看,發現Swift中的Ranges的使用仍是比較合理的,可是想要正確的使用Ranges真的須要一些特別的技巧。函數
看一個例子,下面這段代碼展現的是截取以指定的字符開頭和以指定的字符結尾的子字符串:code
var str = "Hello, playground" let rangeOfHello = Range(start: str.startIndex, end: advance(str.startIndex, 5)) let helloStr = str.substringWithRange(rangeOfHello) helloStr //"Hello"
你能夠看到,不能經過指定開始結束的Int值來獲取Range,須要使用String類的startIndex和endIndex屬性(String.startIndex的類型不是Int),這就是Swift Ranges特別的地方。
字符串
若想獲取一個超出startIndex範圍的Range,你能夠使用上述代碼裏用到的advance的函數。advance也能夠用於從結尾開始計算,因此若是你須要相對於endIndex獲取index,像下面的代碼同樣,使用一個負數便可:get
let dob = "01/01/2000" let rangeOfYear = Range(start: (advance(dob.endIndex, -4)), end: dob.endIndex) let yearStr = dob.substringWithRange(rangeOfYear) yearStr // "2000"
不得不說,細細思量,Swift對於Ranges的使用十分乾淨和優雅,只要你熟悉了它的用法。string