Переходим с Swift2 на Swift3, и как теперь получить count для Range ?


#1

Чем дальше тем больше отрицательных эмоций.
В swift2 было просто получить range.count, теперь нет .count для range. И как это теперь сделать?

Не знаю, может что то там в скорости улучшилось, но ясность и простота в обращении с range исчезла в swift3. Вот нахр, такие нововведения ?


#2

Похоже что никак, CountableRange (для него есть count) не возможно применить для string, a для просто Range count отсутствует. Ну и кто предложил такое новшество в Swift3. Зачем ??? !!! Единственный способ это получить substring из range и посчитать character. Тот кто предложил так изменить swift, заумный ИДИОТ.


#3

Действительно ИДИОТЫ! Вам нужно написать свой язык, со своими диапазонами, и не пользоваться продуктом “идиотов”!
Ну а если слабо, то изучить objc никогда не поздно)


#4

Был бы помоложе написал бы. Пока для меня написание нового алгоритма сравнения последовательностей ДНК и белков достаточно. И ради странных нововведений в swift3 корректировать его не доставляет удовольствия. Вместо Вашей иронии Вы лучше объясните причины для такого изменения если Вы такой знаток. В чем выигрыш нововведений - скорость выполнения каких то операций увеличилась и т.п. С удовольствием поменяю точку зрения, но причин быть довольным в отсутствие преимуществ нововведений не вижу.

В objc стиль языка еще более не естественный, не нравится он мне.

Кстати, есть еще одно странное улучшение. В swift3 отменили С-like for loop в которых использовалось ++ и – , и вместо этого предложили использовать successor(). Когда это произошло я случайно проверил скорость выполнения моего кода с ++ и с successor()… Скорость в разы была меньше. Теперь и successor() отменили, что будет дальше посмотрим. Never change a running system.


#5

Ну а вы бы вместо того что бы хаять всех подряд, посмотрели на реализацию Range в Swift 2.2

public struct Range<Element : ForwardIndexType> : Equatable, CollectionType, CustomStringConvertible, CustomDebugStringConvertible

и 3.0

public struct Range<Bound : Comparable>

Например count пропал потому что он находится в протоколе CollectionType, убрали протокол - пропал count. Почему убрали, это уже другой вопрос и внутренняя реализация языка.

У objc нормальный стиль, возможно он со стороны кажется не естественным, но это только со стороны. Есть еще С и C++, на которых алгоритм получится еще и платформонезависимым.

Не стоит назвать людей идиотами (тем более не знакомых) не зная причин)


Xcode 9 и Swift 4
#6

Естественно что прежде чем сюда писать я почитал про CollectionType и range. Вопрос именно в том зачем они убрали то что было. Меня не очень интересует внутренняя реализация языка. Важно только то чтобы язык стал бы удобнее и программы написанные на этом языке быстрее работали. Удобнее он точно не стал в отношении range. Быстрее ли программы выполняются - это вопрос и возможный единственный excuse если таковое увеличение скорости имеется. Вы знаете о таком улучшении скорости ?

Есть результат swift3 и по результату выносится суждение о тех кто ввел изменения и результат пока говорит о профессиональном идиотизме - хороший предыдущий вариант был заменен на неудобный вариант. В этом нет ничего оскорбительного. Такого рода решения позже признаются ошибками, не важно какими бы внутренними причинами они бы не обусловливались. Apple мне нравится за минимализм, ничего лишнего и мне показалось что swift соответствует этому принципу реализованному в hardware продуктах Apple (стиль objc не тянет на минимализм)


#7

О ну если вы рассуждаете о профнепригодности разработчиков Swift, по всей видимости вы являетесь куда более “бородатым” и мне до вас очень далеко, извините что сделал замечание.

К тому же вы может сами протестировать Range в разных его реализациях и посмотреть на время выполнения, вот например метод contains.
В Swift 2.2:

И 3.0:


Закрыл тему #8