Когда я расширяю Collection
тип count
- IndexDistance
.
Когда я расширяю тип Array
count
имеет тип Int
Почему существует такое различие? Это недавнее изменение, или это всегда было так?
Я прочитал этот ответ, но не мог многое подобрать.
Единственное, что я считал связанным, но не понимал:
Другим преимуществом является то, что этот [IndexDistance] также корректно работает с срезами массива (где индекс первого элемента необязательно равен нулю
Не уверен, что это значит.
Причина, по которой я спрашиваю, заключается в том, почему код вызывает ошибку в коллекции, но не делает этого в Array... хотя оба count
в конечном счете являются Int
.
extension Collection where Element: Comparable{
func whatever(){
for index in 0...count{ // binary operator '...' cannot be applied to operands of type 'Int' and 'Self.IndexDistance'
}
}
}
extension Array where Element: Comparable{
func whatever(){
for index in 0...count{ // NO ERROR
}
}
}
РЕДАКТИРОВАТЬ:
Основываясь на комментариях Мартина и других, я добавил дополнительный вопрос. Вероятно, это основная причина моего вопроса...
Означает ли это, что внутри типа Collection
IndexDistance
не определяется Int
. В основном в целом на уровне "Протокол" связанные типы не определены... Ожидает ли конкретный тип этого? Это правильно?
При этом есть ли какой-либо значимый вариант использования для доступа к count
на уровне "Протокол"? Я имею в виду, что вы не можете сравнить его с любым Int
так что это кажется бесполезным.