如何在Swift中创建范围?

如何在Swift中创建范围?,第1张

如何在Swift中创建范围?

为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
但是,这不起作用,因为字符串是由字符组成的,并且并非所有字符的大小都相同。(有关更多信息,请阅读此内容。)例如

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5662468.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存