有没有办法把String.Index的数值转成Int呢?
比如我想通过一个字符在字符串中的位置,查找一个数组中的相应元素?
eg:通过“123456”中“3”的位置查找[1,2,3,4,5,6]中的3
有没有办法把String.Index的数值转成Int呢?
比如我想通过一个字符在字符串中的位置,查找一个数组中的相应元素?
eg:通过“123456”中“3”的位置查找[1,2,3,4,5,6]中的3
2014-11-04
这个问题已经过去半年了吧,你应该已经解决了,习惯性的看一下问答区,巩固这节课学到的东西,试着答一下。
===================================
源码中String有这么一句
extension String : CollectionType {
它实现了CollectionType这个接口
这个接口是这样的
protocol CollectionType : _CollectionType, SequenceType {
然后看_CollectionType可以知道,Index其实是ForwardIndexType的一个别名,它和String里面的叫Index的struct是不一样的,那个是startIndex
这么复杂的原因是因为每个字符的长度是不一样的,比如视频里的\u{1F496}就和普通的字符"3"不一样长
所以不能简单的通过index去取字符,也就不可能返回一个Int类型的index,因为这个index代表的位置,和通常概念的index是不一样的,它是字符在字符串中的真实位置,不是序号,你想要的其实是个序号,这个序号我没找到怎么直接拿,但是用for循环是可以取到的,数组里就可以用下标了
PS.
然后看到这里,我就不太明白了,怎么才能一个个的去取字符串里的字符呢?
找了点资料后,发现可以这么实现
var str = "\u{1F496}3\u{1F496}3\u{1F496}3\u{1F496}3\u{1F496}"
var step = advance(str.startIndex, 1)
var index = step..<step.successor()
var substring: String = str[index]
这样通过step中的0,1,2,3就可以一个字符串中任意长度的字符了
先通过advance找到第一个字符,然后定义一个range,第一个字符..<下一个字符
再通过这个index就可以拿出对应的字符了。
如果要从开头开始截取到某个位置,可以改成这样
var step = advance(str.startIndex, 2)
var index = str.startIndex..<step
var substring: String = str[index]
举报