Swift:如何检查范围是否对给定字符串有效

时间:2016-09-18 03:23:41

标签: swift xcode

我编写了一个swift函数,它以String和Range作为参数。如何检查范围对字符串是否有效?

编辑:荒谬的例子

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!)

3 个答案:

答案 0 :(得分:4)

在Swift 3中,这很简单:只需获取字符串的字符范围并调用contains即可查看它是否包含您的任意范围。

编辑在Swift 4中,范围不再“包含”范围。 Swift 4.2解决方案可能如下所示:

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

如果ok为真,则可以将r应用于s

答案 1 :(得分:1)

不幸的是,当我使用swift 2.2时,我无法测试Matt的解决方案。但是,根据他的想法,我提出了......

func foo(text: String, range: Range<String.Index>) -> String? {
  let r = text.startIndex..<text.endIndex
  if r.contains(range.startIndex) && r.contains(range.endIndex) {
    return text[range]
  } else {
    return nil
  }
}

如果开始和结束指数都没问题,则必须是整个范围。

答案 2 :(得分:0)

雨燕5

extension String {
    func hasRange(_ range: NSRange) -> Bool {
        return Range(range, in: self) != nil
    }
}