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

Ale*_*yne 9 swift

这里发生了什么?

var foo: [UInt8] = [1,2,3,4]
var bar: [UInt8] = foo[1...2] // 'Range<Pos>' is not convertible to 'Int'
Run Code Online (Sandbox Code Playgroud)

但这编译很好:

var foo: [UInt8] = [1,2,3,4]
var bar = foo[1...2]
Run Code Online (Sandbox Code Playgroud)

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

shoppingList[4...6] = ["Bananas", "Apples"]
Run Code Online (Sandbox Code Playgroud)

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

jtb*_*des 14

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