簡體   English   中英

如何比較Swift中的范圍?

[英]How to compare ranges in 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 {我在讀取行中的跟蹤錯誤

無法使用類型為(String.index,IntegerLiteralConvertible)的參數lis調用'=='

rangeOfString實際上返回一個String.Index的范圍,而不是Int s; 兩者沒有可比性(即使操場顯示范圍為0..<5 )。 您可以在這個問題的答案中閱讀有關原因的原因。

如果你想讓你的例子工作,而不是將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.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'")
    }
}

如果您需要知道范圍的長度,那么您可以使用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")
}

Swift中的〜=運算符

有時,我們必須檢查一個數字是否在一個范圍之間,和往常一樣,我們做的事情如下:

檢查數字是否在0到100之間

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

它有效,但我們可以做得更好,更快捷。 Swift標准庫有一個〜=運算符,所以我們可以這樣做:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM