Swift Raw Values ​​против связанных значений: демистификация перечислений простым языком

Если вы разработчик Swift, вы, вероятно, сталкивались с перечислениями (сокращенно от «перечисления») в какой-то момент вашего кода. Перечисления — это мощная функция Swift, которая позволяет вам определять набор связанных значений. Они позволяют вам представлять конечный набор возможностей типобезопасным и выразительным образом. Два распространенных способа работы с перечислениями в Swift — через необработанные значения и связанные значения. В этой статье мы рассмотрим различия между этими двумя подходами и приведем примеры кода, которые помогут вам лучше их понять.

Основные значения: простота и эффективность

Необработанные значения в перечислениях Swift предоставляют простой и эффективный способ связать значение по умолчанию с каждым случаем. Необработанные значения связаны с регистрами перечисления во время объявления и должны иметь тот же тип. Давайте рассмотрим пример:

enum Direction: String {
    case north = "N"
    case south = "S"
    case east = "E"
    case west = "W"
}

В приведенном выше фрагменте кода у нас есть перечисление Directionс четырьмя регистрами: north, south, eastи west. Каждый случай связан с необработанным значением типа String. Необработанное значение представляет собой сокращенное обозначение для каждого направления.

Используя необработанные значения, вы можете легко преобразовать перечисление в тип его необработанного значения. Например, вы можете получить необработанное значение варианта, используя свойство rawValue:

let direction = Direction.north
print(direction.rawValue) // Output: "N"

Вы также можете инициализировать экземпляр перечисления на основе его необработанного значения:

let direction = Direction(rawValue: "E")
print(direction) // Output: Optional(Direction.east)

Необработанные значения особенно полезны, когда у вас есть фиксированный набор случаев, которые сопоставляются с предопределенными значениями, например сопоставление случаев перечисления с кодами ответов серверного API или представление набора параметров в пользовательском интерфейсе.

Связанные ценности: гибкость и богатство

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

Давайте рассмотрим сценарий, в котором нам нужно смоделировать различные типы транспортных средств с разными характеристиками:

enum Vehicle {
    case car(make: String, model: String)
    case motorcycle(make: String, engineCapacity: Double)
    case bicycle(brand: String, hasBasket: Bool)
}

В приведенном выше примере перечисление Vehicleимеет три варианта: car, motorcycleи bicycle. С каждым случаем связаны значения разных типов, представляющие определенные атрибуты каждого типа транспортного средства.

Чтобы создать экземпляр перечисления со связанными значениями, вы можете указать необходимые значения при инициализации перечисления:

let myCar = Vehicle.car(make: "Toyota", model: "Camry")
let myMotorcycle = Vehicle.motorcycle(make: "Honda", engineCapacity: 500.0)
let myBicycle = Vehicle.bicycle(brand: "Giant", hasBasket: true)

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

Выбор между необработанными значениями и связанными значениями

Решение использовать необработанные значения или связанные значения зависит от конкретных требований вашего проекта. Вот несколько рекомендаций, которые следует учитывать:

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

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

В заключение, перечисления Swift предоставляют мощный инструмент для представления конечного набора возможностей типобезопасным способом. Независимо от того, выбираете ли вы необработанные значения или связанные значения, перечисления позволяют вам структурировать код таким образом, чтобы эффективно и результативно отражать суть проблемной области.

Итак, используйте возможности перечислений Swift в своем следующем проекте и раскройте весь потенциал структурированного и выразительного кода!