swift中的Index

相信很多從OC轉(zhuǎn)寫(xiě)swift的小伙伴都遇到過(guò)這樣的問(wèn)題;

Paste_Image.png

點(diǎn)進(jìn)去看后會(huì)發(fā)現(xiàn),此處的參數(shù)類型應(yīng)為String.CharacterView.Index,但是點(diǎn)進(jìn)去卻發(fā)現(xiàn)沒(méi)有構(gòu)造方法,想當(dāng)然地嘗試下

Paste_Image.png

那怎么辦?

Paste_Image.png

再看一眼,String中關(guān)于Index的定義,我們可以發(fā)現(xiàn)其中有successor()predecessor()兩個(gè)方法,分別可以得到當(dāng)前index的后一個(gè)位置和前一個(gè)位置,而String中有startIndexendIndex兩個(gè)屬性,我們可以使用這兩個(gè)屬性配合兩個(gè)獲取位置的方法獲取到任意的位置,但是這樣效率也太慢了,萬(wàn)一需要獲取中間的怎么辦。別急,還有一個(gè)advancedBy(n: Int)方法,可以傳入步長(zhǎng),獲取到任意的Index。

如果覺(jué)得這樣太麻煩可以對(duì)String進(jìn)行拓展以符合以前的操作習(xí)慣:

extension String{
    func substringToIndex(index: UInt) -> String {
        return self.substringToIndex(self.startIndex.advancedBy(Int(index)))
    }
    
    func substringFromIndex(index: UInt) -> String {
        return self.substringFromIndex(self.startIndex.advancedBy(Int(index)))
    }
    
    func substringWithRange(start: UInt, end: UInt) -> String {
        let range = self.startIndex.advancedBy(Int(start)) ..< self.startIndex.advancedBy(Int(end))
        return self.substringWithRange(range)
    }
}
Paste_Image.png

當(dāng)然這只是為了一般字符串的截取的簡(jiǎn)單操作,如果設(shè)計(jì)到編碼轉(zhuǎn)換的時(shí)候不要這么做。

關(guān)于swift中為什么使用了Index類型而不是以前的NSUInteger,推薦大家閱讀這篇文章:
http://swift.gg/2016/01/25/friday-qa-2015-11-06-why-is-swifts-string-api-so-hard/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基礎(chǔ)部分(The Basics) 當(dāng)推斷浮點(diǎn)數(shù)的類型時(shí),Swift 總是會(huì)選擇Double而不是Float。 結(jié)合...
    gamper閱讀 1,487評(píng)論 0 7
  • 53.計(jì)算字符 在字符串中獲取字符值的數(shù)量, 可以使用字符串字符屬性中的計(jì)數(shù)屬性: let unusualMena...
    無(wú)灃閱讀 1,256評(píng)論 0 4
  • 覺(jué)得不錯(cuò)就關(guān)注我吧,不定期更新文章,QQ:1345614869 字符串初始化 1 最常用的幾種方法 2 使用特定字...
    NinthDay閱讀 4,282評(píng)論 6 18
  • Swift 中的字符串截取 發(fā)表于2016-12-14||100 Substring in Swift 3.0 I...
    762683ff5d3d閱讀 2,849評(píng)論 0 0
  • 每當(dāng)元旦一過(guò),進(jìn)入臘月,所有的超市都打出了條幅,所有的賣場(chǎng)都喧囂起來(lái),人們口中交談的、手頭開(kāi)始準(zhǔn)備的、連空氣中氛圍...
    茵塵閱讀 672評(píng)論 3 11

友情鏈接更多精彩內(nèi)容