Теперь, когда я научился Swift (на разумном уровне), я пытаюсь справиться со стандартной библиотекой, но на самом деле это в основном ελληνικά для меня!
Итак, конкретный вопрос: у меня есть массив строк, и я могу вызвать reverse() на нем.
let arr = ["Mykonos", "Rhodes", "Naxos"].reverse()
Теперь наивно я подумал, что я вернусь от этого типа Массив. (Ruby, например, имеет аналогичный метод, по которому вы передаете массив и возвращаете массив)
Но теперь arr имеет тип
ReverseRandomAccessCollection<Array<String>>
который на самом деле является структурой, которая соответствует CollectionType:
public struct ReverseRandomAccessCollection<Base : CollectionType where Base.Index : RandomAccessIndexType> : _ReverseCollectionType
Это означает, что я могу это сделать:
for item in arr {
print(item)
}
но я не могу сделать
print(arr[0])
Почему это так должно быть?
Словари в Swift также реализуют CollectionType, поэтому я могу это сделать:
let dict = ["greek" : "swift sometimes", "notgreek" : "ruby for this example"].reverse()
Но словари не упорядочены, как массивы, поэтому почему я могу вызвать reverse() на dicts?
Бонусные баллы, если кто-нибудь может указать мне в направлении, где я могу читать и улучшать свой Swift stdlib foo, Ευχαριστώ!