let tools = ["a", "b", "c", "d"]
let index = 1
let target = "a"
let leftDirectionArray = Array(tools.reversed())
let leftDirection = leftDirectionArray[(tools.count - index) - 1 ..< tools.count]
print("leftDirectionArray: \(leftDirectionArray)")
print("leftDirection: \(leftDirection)")
print("leftDirection count: \(leftDirection.count)")
let firstIndexA = leftDirection.firstIndex { $0 == target } ?? 0
let firstIndexB = leftDirection.firstIndex(of: target) ?? 0
print("firstIndexA: \(firstIndexA)")
print("firstIndexB: \(firstIndexB)")
Outputs
leftDirectionArray: ["d", "c", "b", "a"]
leftDirection: ["b", "a"]
leftDirection count: 2
firstIndexA: 3
firstIndexB: 3
So my question is why is the return for firstIndex
is 3 when there should be only 2 in the array? does it mean the firstIndex
still does the operation on the original array?
leftDirection
is not an Array
but an ArraySlice
and this is described in the documentation as
an ArraySlice instance presents a view onto the storage of a larger array
So the elements you see are the elements of leftDirectionArray
and their position in the real array
print(type(of: leftDirection))
leftDirection.indices.forEach { print($0) }
ArraySlice
2
3