Swift里计数相关的小细节

Swift里对于字符串这些引入了index型,相对其他语言而言字符操作更安全了,但是问题就是一不注意搞错范围就会有各种离奇的bug。

在讲主题前,先说个小细节。
Swift里非常严密的定义了一大堆字符串长度量,但我们实际开发基本上只有字符(character)的长度有用。
还是上例子

var strTemp = "这只是一个萌萌哒小测试"

print("萌萌哒长度: " + String(strTemp.characters.count))

运行结果如下:

萌萌哒长度: 11

 

每次都要字符串.characters.count来取出字符串长度太过麻烦,索性扩张一下String好了

extension String {

    var length: Int {

        return self.characters.count

    }

}

然后测试一下

print("萌萌哒长度: " + String(strTemp.length))

运行结果如下:

萌萌哒长度: 11

 

然后回到主题,Swift里面的各种计数以及索引所用的都是实际长度

比如文字长度,因为计数的是实际长度而不是数组索引数,endIndex不能直接用

比如有一个字符串

var test: String = "我是一个萌萌哒懒虫哥哥"

我们要想删除其最后一个字,如果直接这么写

test.remove(at: test.endIndex)

这么写会报错,说是索引超出范围。原因就是endIndex是实际的最后索引,而字符串这类数据类型的索引是从0开始的,所以要给endIndx-1但是最开始也说过了,Swift里的字符串索引是专用型,不能直接操作。还是看下面的代码

var strTemp2 = ""

strTemp2 = String(strTemp.remove(at: strTemp.index(before: strTemp.index(before: strTemp.endIndex))))

strTemp2 += String(strTemp.remove(at: strTemp.index(before: strTemp.endIndex)))

print(strTemp2)

运行结果如下:

测试

 

posted @ 2017-04-06 10:47  懒虫哥哥  阅读(99)  评论(0编辑  收藏  举报