为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法把String.Index的数值转成Int呢?

比如我想通过一个字符在字符串中的位置,查找一个数组中的相应元素?

eg:通过“123456”中“3”的位置查找[1,2,3,4,5,6]中的3

正在回答

1 回答

这个问题已经过去半年了吧,你应该已经解决了,习惯性的看一下问答区,巩固这节课学到的东西,试着答一下。

===================================

源码中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]


0 回复 有任何疑惑可以回复我~
#1

TickTock

刚刚对String.Index的理解有点错误,视频里说的String.Index 指的就是那个Struct
2015-03-04 回复 有任何疑惑可以回复我~
#2

TickTock

刚刚没看完,先自己研究了,原来视频中已经讲了^_^
2015-03-04 回复 有任何疑惑可以回复我~
#3

TickTock

还是老师讲的棒啊,我找的资料居然用[]来取字符,老师介绍的几个方法很实用,但是swift的字符串操作确实好麻烦。找过资料再看,感觉清楚多了,上面的回答多少有些误人子弟的地方,大家不要介意了,我只是试着答一下
2015-03-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
玩儿转Swift
  • 参与学习       57172    人
  • 解答问题       511    个

这套教程比任何的Swift中文教程深入,并且演示示例更丰富

进入课程
意见反馈 帮助中心 APP下载
官方微信