Как отмечает Вадиан, совет Apple заключается в том, чтобы кортежи использовались только для временных значений.это кончается.Если вам нужно сделать что-то нетривиальное со структурой данных, в том числе сохранить ее в свойстве, вам, вероятно, не нужен кортеж.Они очень ограничены.
Я бы не использовал термин "объект" в этом обсуждении.Это расплывчатый, описательный термин, который не соответствует какой-либо конкретной структуре данных.Правильный способ думать о кортеже в противоположность структуре.В принципе, кортеж - это просто анонимная структура, но в Swift кортеж значительно менее гибок, чем структура.Наиболее важно то, что вы не можете добавлять расширения в кортеж, и добавление расширений является основной частью программирования Swift.
В основном, когда вы думаете, что вам нужно пометить поля кортежа, вы, вероятно,вместо этого следует использовать структуру.Простые типы, такие как «точка», моделируются как структуры, а не как кортежи.
Так когда же вы будете использовать кортеж?Рассмотрим следующий (несуществующий) метод для Collection:
extension Collection {
func headTail() -> (Element?, SubSequence) {
return (first, dropFirst())
}
}
Это хорошее использование кортежа.Было бы бесполезно придумывать специальную структуру только для того, чтобы вернуть это значение, и вызывающие абоненты почти всегда будут хотеть деструктурировать это так:
let (head, tail) = list.headTail()
Это одна вещь, которую могут делать кортежи, что структуры не могут (по крайней мере,сегодня продолжается обсуждение вопроса о добавлении структурной деструктуризации и сопоставления с образцом в Swift).