🔥

Тред (Глеб Лукьянец)


Таплы тоже, кстати, странные. Во-первых, свифт не допускает таплов от одного элемента. Во-вторых, их нельзя расширять, поддерживать протоколы и.т.п.

Из-за этого часто приходится заменять использование тапла на отдельную структуру когда ну очень нужно чтобы он стал, например, Comparable.

Особенно обидно что в каком-нибудь расте тапл с одним элементом и кучей навешаных трейтов отлично работает и это даже считается идиоматичным

А вы используете таплы в своих проектах?
🤔 14.1% Использую везде
🤔 6.4% Только вне интерфейсов
🤔 42.3% В спец. конструкциях
🤔 37.2% Избегаю везде

Странные, кстати, не только таплы. Эти два минуса относятся ко всем неноминальным (структурным) типам в свифте: Any/Object, A -> B, A & B, A.Type.

Суть такого разделения ясна: структурный тип не принадлежит модулю, и полностью определяется своей сигнатурой. Думать о структурных типах удобнее всего как о "чистой" композиции над его аргументами.

А вот почему свифт не допускает расширения структурных типов – совсем не понятно. На первый взгляд кажется что это может быть связано с правилами владения между модулями, но, думаю, все ограничения можно было бы обойти. Bummer.