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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (31)

我编写了一个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!)
提问于
用户回答回答于

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

在Swift 4中,范围不再“contains”范围。如果s是字符串并且r是目标范围,则须写类似代码:

s.indices.contains(r.lowerBound) && s.indices.contains(r.upperBound)
用户回答回答于

修复了它并简洁化:

extension String {
    func containsRange(_ range: Range<String.Index>) -> Bool {
        let fullRange = startIndex...endIndex
        return fullRange.contains(range.lowerBound) && fullRange.contains(range.upperBound)
    }
}

扫码关注云+社区

领取腾讯云代金券