如何比较Swift中的范围?

我不确定它是否是XCode中的错误,或者我不理解 Swift中的范围.以下是一些显示范围如何工作的代码:
let range = 0..<5
contains(range,0) // true
contains(range,5) // false
range.startIndex == 0 // true
range.endIndex == 5 // true

let str = "Hello,playground"
str.rangeOfString("Hello")! // 0..<5

大!现在让我们使用真正的代码:

let str = "Hello,playground"
if let range = str.rangeOfString("Hello") {
    if range.startIndex == 0 {
        print("str starts with 'Hello'")
    }
}

如果range.startIndex == 0 {我在读取行中的跟踪错误

Cannot invoke ‘==’ with an argument lis of type (String.index,
IntegerLiteralConvertible)’

rangeOfString实际上返回一个String.Indexs范围,而不是Ints;两者无法比较(即使操场显示范围为0 ..< 5).您可以在 this question的答案中了解原因.

如果您希望您的示例正常工作,而不是将range.startIndex与0进行比较,则应将其与str.startIndex进行比较:

let str = "Hello,playground"
if let range = str.rangeOfString("Hello") {
    if range.startIndex == str.startIndex {
        print("str starts with 'Hello'")
    }
}

如果需要将字符串的startIndex与字符串中的第二个字符索引进行比较,则可以使用advance函数将str.startIndex递增1并将range.startIndex与之比较:

let str = "Hello,playground"
if let range = str.rangeOfString("e") {
    if range.startIndex == advance(str.startIndex,1) {
        print("str's 2nd character is 'e'")
    }
}

如果您需要知道范围的长度,那么您可以使用distance功能:

let str = "Hello,playground"
if let range = str.rangeOfString("play") {
    let length = distance(range.startIndex,range.endIndex)
    print("found a range \(length) characters long")
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...