如何比较Swift中的范围?

Moh*_*sen 7 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
Run Code Online (Sandbox Code Playgroud)

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

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

我正在读取跟踪错误 if range.startIndex == 0 {

无法使用类型为(String.index,IntegerLiteralConvertible)的参数lis调用'=='

Mik*_*e S 8

rangeOfString实际上返回一个String.Indexs而不是Ints 的范围; 两者没有可比性(即使操场显示范围为0..<5).您可以在这个问题的答案中阅读有关原因的原因.

如果您希望您的示例工作,而不是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'")
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你需要比较的范围内的startIndex有,比方说,第二个字符的索引字符串中,那么你可以使用advance函数来增加str.startIndex1,比较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'")
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要知道范围的长度,那么您可以使用以下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")
}
Run Code Online (Sandbox Code Playgroud)

  • @Mohsen这不是一个疯狂的人物,而是阿拉伯语中的一句话:“和平在他身上”(穆斯林称赞先知)。为方便起见(经常使用),该句子以单行连字形式存在(与许多其他形式一样)。希望它能揭示一个谜:-) (2认同)

小智 7

Swift中的〜=运算符

有时,我们必须检查一个数字是否在一个范围之间,和往常一样,我们做的事情如下:

检查数字是否在0到100之间

if number >=0 && number <= 100 {  
   // TODO:
}
Run Code Online (Sandbox Code Playgroud)

它有效,但我们可以做得更好,更快捷.Swift标准库有一个〜=运算符,所以我们可以这样做:

if 0...100 ~= number {  
   // TODO:
 }
Run Code Online (Sandbox Code Playgroud)