Каково правильное поведение endIndex массива в Swift? EndIndex возвращает те же значения, что и count. Это правильное поведение или ошибка? var ar = [1, 2, 3, 4] ar.count // 4 ar.endIndex // 4 Ответ 1 count - количество элементов в коллекции, тогда как endIndex - Index (из протокола Indexable), который только что прошел конец коллекции. Для Array, это то же самое. Для некоторых других коллекций, таких как ArraySlice, они не являются: let array = ["a", "b", "c", "d", "e"] array.startIndex // 0 array.count // 5 array.endIndex // 5 let slice = array[1..<4] // elements are "b", "c", "d" slice.startIndex // 1 slice.count // 3 slice.endIndex // 4 Ответ 2 Array.endIndex означает 1 за концом массива (или то же, что и count) для целей итерации, а не для подписи. let x = [1, 2, 3, 4] for var i = x.startIndex; i < x.endIndex; i++ { println(x[i]) }
Ответ 1 count - количество элементов в коллекции, тогда как endIndex - Index (из протокола Indexable), который только что прошел конец коллекции. Для Array, это то же самое. Для некоторых других коллекций, таких как ArraySlice, они не являются: let array = ["a", "b", "c", "d", "e"] array.startIndex // 0 array.count // 5 array.endIndex // 5 let slice = array[1..<4] // elements are "b", "c", "d" slice.startIndex // 1 slice.count // 3 slice.endIndex // 4
Ответ 2 Array.endIndex означает 1 за концом массива (или то же, что и count) для целей итерации, а не для подписи. let x = [1, 2, 3, 4] for var i = x.startIndex; i < x.endIndex; i++ { println(x[i]) }