Найти в Дзене
Coding Corner

Enums (Перечисления) простой гайд

Одна из тех тем, которую я долго не мог понять. Вопросы, которые задавал себе. И одно из главных преимуществ, которое я выделил для себя - разграничить количество вариантов для работы и более простое управление потоком. Как мы можем создать перечисление? enum Languages { case java case c++ case swift case objective-c } Мы создали свой тип Languages и перечислили все возможные для него варианты. Теперь давайте создадим один экземпляр. Также обратите внимание, что выше мы всего лишь перечислили возможные варианты, никаких значений внутри они не содержат. let sample : Languages = .java мы создали экземпляр который относится к типу перечисления Languages и имеет кейс .java. ----> К нужному варианту мы обращаемся через точку. Давайте создадим перечисление со значениями внутри. enum Notes : Int { case thousand = 1000 case hundred = 100 case fifty = 50 } Мы создали перечисление Notes с значениями внутри каждого кейса. Во время создания мы указали, что наше перечисление относится к типу Int

Одна из тех тем, которую я долго не мог понять.

Вопросы, которые задавал себе.

  • Зачем она нужна?
  • Зачем мне использовать enums для состояний если я могу использовать просто формат String и сравнивать по нему?

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

Как мы можем создать перечисление?

enum Languages {

case java

case c++

case swift

case objective-c

}

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

let sample : Languages = .java

мы создали экземпляр который относится к типу перечисления Languages и имеет кейс .java.

----> К нужному варианту мы обращаемся через точку.

Давайте создадим перечисление со значениями внутри.

enum Notes : Int {

case thousand = 1000

case hundred = 100

case fifty = 50

}

Мы создали перечисление Notes с значениями внутри каждого кейса. Во время создания мы указали, что наше перечисление относится к типу Int (Целые числа).

Как нам его получить?

let sample : Int = Notes.fifty.rawValue

----> Чтобы получить значение Int, которое присвоено кейсу мы в конце обращения добавляем .rawValue

Простой пример как мы можем это использовать

struct TextBuilder : View {

let type : Languages

var body : some View {

switch type {

case .java:

Text("Java")

.foregroundColor(.blue)

case .c++:

Text("C++")

.foregroundColor(.blue)

case .swift:

Text("Swift")

.foregroundColor(.blue)

case .objective-c:

Text("Objective-C")

.foregroundColor(.blue)

}

}

}

Мы создали структуру, которая возвращает текст. Она проверяет переданный нами кейс перечисления при инициализации и возвращает заранее определенный нами шаблон в зависимости от случая.

Давайте применим его в самом Content-View :

struct ContentView : View {

var body : some View {

TextBuilder(type : .swift)

}

}

Таким образом на View будет выведен текст : "Swift", со шрифтом синего цвета. Если мы передадим вместо .swift любой другой язык из 3 оставшихся кейсов - текст будет перестроен по их условиям.

Благодарю за внимание!