问答详情
源自:5-3 Swift 2.0字符串之String.Index 和 Range

str.startIndex和str.endIndex是可以用随便的String变量定义的

比如,随便定义一个字符串

var str1 = "it's useless"

var str2 = "This is a string test"

let startIndex = str1.startIndex

print(str2[startIndex])

输出的是"T",说明用str1定义的startIndex一样可以被其他字符串用,这是不是有点不够严谨?


提问者:neeet 2016-04-11 22:17

个回答

  • liuyubobobo
    2016-04-13 10:16:08

    非常好的问题!强烈建议慕课网可以给问题点赞!

    目前,String.Index类型完全可以当做一个整型来看。封装成这个新的类型是为了保证能够在字符串中通行处理Unicode字符的相关的问题。在这个意义下,startIndex就是一个0,可以被使用在任何其他字符串中。

    但是必须承认,这是不安全的,同时也失去了str1.startIndex这样声明的意义!也就是说str1.startIndex不能充当str1的迭代器!

    我之前没有尝试这个问题,现在看来,这个地方确实不够严谨。不过swift还在不断进化。可能以后,这个问题会被修改。可以关注苹果官方的这个repo来了解swift的进一步进化方向:https://github.com/apple/swift-evolution

    同时,也希望关注这个课程的github:https://github.com/liuyubobobo/Play-with-Swift-2,多提宝贵意见!谢谢你!

  • Anonymous0123
    2016-04-12 09:50:09

    startIndex是一个由str1赋值的Index类型的常量,被str2调用没什么问题吧...