如何比较Swift中的范围?

时间:2014-10-29 23:10:40

标签: 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'")
    }
}

我在阅读if range.startIndex == 0 {

的行中遇到以下错误
  

无法调用&#39; ==&#39;带有参数lis的类型(String.index,   IntegerLiteralConvertible)&#39;

2 个答案:

答案 0 :(得分:8)

rangeOfString实际上会返回String.Index s而不是Int s的范围;两者无法比较(即使操场显示范围为0..<5)。您可以在this question的答案中了解相关原因。

如果您希望自己的示例正常运行,而不是将range.startIndex0进行比较,则应将其与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}然后将1与之比较:

range.startIndex

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

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

答案 1 :(得分:6)

Swift中的〜=运算符

有时,我们必须检查一个数字是否介于某个范围之间,并且像往常一样,我们会执行以下操作:

检查数字是否介于0到100之间

if number >=0 && number <= 100 {  
   // TODO:
}

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

if 0...100 ~= number {  
   // TODO:
 }