Таплы тоже, кстати, странные.
Во-первых, свифт не допускает таплов от одного элемента.
Во-вторых, их нельзя расширять, поддерживать протоколы и.т.п.
Из-за этого часто приходится заменять использование тапла на отдельную структуру когда ну очень нужно чтобы он стал, например, Comparable.
Особенно обидно что в каком-нибудь расте тапл с одним элементом и кучей навешаных трейтов отлично работает и это даже считается идиоматичным
А вы используете таплы в своих проектах?
🤔
14.1%
Использую везде🤔
6.4%
Только вне интерфейсов🤔
42.3%
В спец. конструкциях🤔
37.2%
Избегаю вездеСтранные, кстати, не только таплы. Эти два минуса относятся ко всем неноминальным (структурным) типам в свифте: Any/Object, A -> B, A & B, A.Type.
Суть такого разделения ясна: структурный тип не принадлежит модулю, и полностью определяется своей сигнатурой. Думать о структурных типах удобнее всего как о "чистой" композиции над его аргументами.
А вот почему свифт не допускает расширения структурных типов – совсем не понятно. На первый взгляд кажется что это может быть связано с правилами владения между модулями, но, думаю, все ограничения можно было бы обойти. Bummer.