[SOLVED] Swift: How to check if a range is valid for a given string

Issue

I have written a swift function that takes a String and a Range as its parameters. How can I check that the range is valid for the string?

Edit: Nonsensical Example

func foo(text: String, range: Range<String.Index>) ->String? {
  // what can I do here to ensure valid range
  guard *is valid range for text* else {
    return nil
  }
  return text[range]
}

var str = "Hello, world"
let range = str.rangeOfString("world")
let str2 = "short"
let text = foo(str2, range: range!)

Solution

In Swift 3, this is easy: just get the string’s character range and call contains to see if it contains your arbitrary range.

Edit: In Swift 4, a range no longer "contains" a range. A Swift 4.2 solution might look like this:

let string = // some string
let range = // some range of String.Index
let ok = range.clamped(to: string.startIndex..<string.endIndex) == range

If ok is true, it is safe to apply range to string.

Answered By – matt

Answer Checked By – David Marino (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published.