Tuple vs. Object в Swift - PullRequest
       6

Tuple vs. Object в Swift

0 голосов
/ 02 марта 2019

Я читал о различиях в кортежах и словарях / массивах, но мне еще не приходилось сталкиваться с публикацией о переполнении стека, объясняющей разницу между кортежем и объектом в Swift.

Причина, по которой я спрашиваюИз опыта видно, что кортеж может быть взаимозаменяемым с объектом в Swift во многих обстоятельствах (особенно в тех случаях, когда объект содержит только другие объекты или данные), но может привести к несовместимому / грязному коду.

Есть ли в Swift время для использования кортежа и время для использования базового объекта на основе методологий производительности или кодирования?

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Как отмечает Вадиан, совет Apple заключается в том, чтобы кортежи использовались только для временных значений.это кончается.Если вам нужно сделать что-то нетривиальное со структурой данных, в том числе сохранить ее в свойстве, вам, вероятно, не нужен кортеж.Они очень ограничены.

Я бы не использовал термин "объект" в этом обсуждении.Это расплывчатый, описательный термин, который не соответствует какой-либо конкретной структуре данных.Правильный способ думать о кортеже в противоположность структуре.В принципе, кортеж - это просто анонимная структура, но в Swift кортеж значительно менее гибок, чем структура.Наиболее важно то, что вы не можете добавлять расширения в кортеж, и добавление расширений является основной частью программирования Swift.

В основном, когда вы думаете, что вам нужно пометить поля кортежа, вы, вероятно,вместо этого следует использовать структуру.Простые типы, такие как «точка», моделируются как структуры, а не как кортежи.

Так когда же вы будете использовать кортеж?Рассмотрим следующий (несуществующий) метод для Collection:

extension Collection {
    func headTail() -> (Element?, SubSequence) {
        return (first, dropFirst())
    }
}

Это хорошее использование кортежа.Было бы бесполезно придумывать специальную структуру только для того, чтобы вернуть это значение, и вызывающие абоненты почти всегда будут хотеть деструктурировать это так:

let (head, tail) = list.headTail()

Это одна вещь, которую могут делать кортежи, что структуры не могут (по крайней мере,сегодня продолжается обсуждение вопроса о добавлении структурной деструктуризации и сопоставления с образцом в Swift).

0 голосов
/ 03 марта 2019

В Swift Tuple - это составной тип, который объединяет некоторые свойства, которые созданы из объектов именованных типов Swift, например, class, struct и enum.

Я бы сравнил объекты этих именованных типов как минералыхимических элементов (таких как углерод, кальций), а Tuple - это просто физическая смесь этих минералов (например, пакет из 1 части кальциевой руды и 3 частей углеродной руды).Вы можете легко носить с собой этот упакованный кортеж и добавлять его к методу «жара или пресс», чтобы вернуть «известняк», используемый вашим приложением в строительстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...