为Swift 4更新
Swift范围比复杂
NSRange,并且在Swift
3中并没有那么简单。如果您想尝试了解这种复杂性背后的原因,请阅读this和this。我将仅向您展示如何创建它们以及何时使用它们。
封闭范围: a...b
此范围运算符创建一个Swift范围,其中既包含element
a又 包含element
b,即使它
b是类型(如
Int.max)的最大可能值。封闭范围有两种不同类型:
ClosedRange和
CountableClosedRange。
1。 ClosedRange
Swift中所有范围的元素都是可比较的(即,它们符合Comparable协议)。这样就可以访问集合中范围内的元素。这是一个例子:
let myRange: ClosedRange = 1...3let myArray = ["a", "b", "c", "d", "e"]myArray[myRange] // ["b", "c", "d"]
但是,a
ClosedRange是不可数的(即,它不符合Sequence协议)。这意味着您不能使用循环来遍历元素
for。为此,您需要
CountableClosedRange。
2。 CountableClosedRange
这类似于最后一个,除了现在也可以迭代范围。
let myRange: CountableClosedRange = 1...3let myArray = ["a", "b", "c", "d", "e"]myArray[myRange] // ["b", "c", "d"]for index in myRange { print(myArray[index])}半开范围 a..<b
此范围运算符包括element,
a但 _不_包括element
b。像上面一样,有两种不同类型的半开范围:
Range和
CountableRange。
1。 Range
与一样
ClosedRange,您可以使用来访问集合的元素
Range。例:
let myRange: Range = 1..<3let myArray = ["a", "b", "c", "d", "e"]myArray[myRange] // ["b", "c"]
同样,您不能对a进行迭代,
Range因为它仅是可比较的而不是可跨越的。
2。 CountableRange
A
CountableRange允许迭代。
let myRange: CountableRange = 1..<3let myArray = ["a", "b", "c", "d", "e"]myArray[myRange] // ["b", "c"]for index in myRange { print(myArray[index])}NSRange
您仍然可以(必须)
NSRange有时仍在Swift中使用(例如,在制作属性字符串时),因此了解如何制作一个字符串很有帮助。
let myNSRange = NSRange(location: 3, length: 2)
请注意,这是位置和 长度 ,而不是开始索引和结束索引。此处的示例在含义上与Swift范围相似
3..<5。但是,由于类型不同,因此不能互换。
带字符串的范围
在
...和
..<范围内经营者创建范围的简便方法。例如:
let myRange = 1..<3
创建相同范围的长期方法是
let myRange = CountableRange<Int>(uncheckedBounds: (lower: 1, upper: 3)) // 1..<3
您可以看到此处的索引类型为
Int。
String但是,这不起作用,因为字符串是由字符组成的,并且并非所有字符的大小都相同。(有关更多信息,请阅读此内容。)例如



