你也可以用 generate() 来遍历:
var range = 1...4
var generator = range.generate() // {startIndex 1, endIndex 5}
generator.next() // 1
generator.next() // 2
generator.next() // 3
generator.next() // 4
generator.next() // nil
.generate() 返回一个 RangeGenerator<T> 的结构体,可以用来遍历 Range<T> 中的值。
以前还有个 (5...1).by(-1) 的用法,不过现在好像没用了。
区间运算符返回的是一个 ClosedInterval 或者 HalfOpenInterval 的东西,类型只要是 Comparable 就可以了。所以我们也可以把 String 放到 ... 里。
比如猫神的 Swifter Tips 中有一章的代码如下,通过 String 的 ClosedInterval 来输出字符串中的小写字母:
let test = "Hello"
let interval = "a"..."z"
for c in test {
if interval.contains(String(c)) {
println("(c)")
}
}
SubString
Ruby 中用点点点来获取 SubString 的方法很方便:
2.1.3 :001 > a="abc"
=> "abc"
2.1.3 :002 > a[0]
=> "a"
2.1.3 :003 > a[0..1]
=> "ab"
而 Swift 中的 ClosedInterval 是没有 subscript 的。但是任性的我们就是要用 [1...3] 这种方法怎么办呢?
自己动手丰衣足食,写个 extension 吧,只需要加个 subscript 就可以了,然后下标的类型是 Range<Int> 就可以了:
extension String {
subscript (r: Range<Int>) -> String {
get {
let startIndex = advance(self.startIndex, r.startIndex)
let endIndex = advance(startIndex, r.endIndex - r.startIndex)
return self[Range(start: startIndex, end: endIndex)]
}
}
}
var s = "Hello, playground"
println(s[0...5]) // ==> "Hello,"
println(s[0..<5]) // ==> "Hello"
如果要搜索目标字符串之后再截取 substring 可以这样:
let name = "Joris Kluivers"
let start = name.startIndex
let end = find(name, " ")
if (end != nil) {
let firstName = name[start..<end!]
} else {
// no space found
}
以上所述就是本文的全部内容了,希望大家能够喜欢。
注:相关教程知识阅读请移步到swift教程频道。








