这里发生了什么?
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]
究竟又回归了什么?什么是在两个数组索引之间获取对象的最简单方法?
答案 0 :(得分:14)
struct Array
声明subscript (subRange: Range<Int>) -> Slice<T>
。因此,bar
的类型应为Slice<UInt8>
,而不是[UInt8]
。 Slice
符合与Array
相同的协议,因此您的其余代码不需要更改,您可以选择不留下类型注释。 (或者,如果你真的想,可以使用Array(foo[1...2])
将它转换为数组。)