使用下标中的范围进行Swift数组切片

时间:2014-08-03 21:11:52

标签: swift

这里发生了什么?

var foo: [UInt8] = [1,2,3,4]
var bar: [UInt8] = foo[1...2] // 'Range<Pos>' is not convertible to 'Int'

但是编译得很好:

var foo: [UInt8] = [1,2,3,4]
var bar = foo[1...2]

文档仅在替换方面明确提及:

shoppingList[4...6] = ["Bananas", "Apples"]

那么Array[Range]究竟又回归了什么?什么是在两个数组索引之间获取对象的最简单方法?

1 个答案:

答案 0 :(得分:14)

struct Array声明subscript (subRange: Range<Int>) -> Slice<T>。因此,bar的类型应为Slice<UInt8>,而不是[UInt8]Slice符合与Array相同的协议,因此您的其余代码不需要更改,您可以选择不留下类型注释。 (或者,如果你真的想,可以使用Array(foo[1...2])将它转换为数组。)