Урок 20. Классы
Главная / Уроки / Страница блока Основы / Урок 20. Классы
22 Марта 2023
В языке swift все программы состоятся из взаимодействующих между собой объектов. Swift использует три абстрактные конструкции – классы, структуры и перечисления – для создания объектов.
С перечислениями вы уже знакомы, ну а на этом уроке я расскажу о классах.
Определение Класса
Что значит абстрактная конструкция?
Если я просто напишу слово “Собака”, у себя в голове вы сразу увидите картинку какой то определенной собаки, кто то подумает о большом бульдоге, кто то о дружелюбном хаски, а кто-то о маленьком шпице, одним словом все мы будем думать о собаке, но для каждого это будет своя порода и свои характеристики, длинна хвоста, форма ушей, рост, вес и так далее. Так вот слово “Собака” – это абстракция, а те собаки, которых вы представили у себя в голове, это уже конкретный объект.
Так вот класс, является абстрактной конструкцией, на основе которой можно создать объект. Давайте посмотрим на синтаксис класса:
class Имя класса {
}
После ключевого слова class мы прописываем название абстракции и фигурные скобки, в которых определяем структуру и поведение объектов, которые будут создаваться из него.
Чтобы создать абстрактного “пёсика”, мы можем определить класс Dog, в котором будут свойства, описывающие характеристики собаки. Например:
class Dog {
var name = ""
var breed = ""
var tailLength = 0
}
У абстрактной собаки есть имя, порода и длина хвоста.
Это только шаблон собаки, и на основе этого шаблона, мы можем создать конкретную собаку и делается это следующим образом:
class Dog {
var name = ""
var breed = ""
var tailLength = 0
}
let myDog = Dog()
Мы создаем свойство myDog и присваиваем ему объект класса Dog(). Это уже конкретная собака, которой можно задать свое имя, породу и длину хвоста.
myDog это ссылка на объект класса, а объект класса это буквально ячейка памяти, которая создается в тот момент когда вы обращаетесь к имени класса с круглыми скобками: Dog(). Это называется инициализацией класса.
Свойства класса
Мы можем обращаться к свойствам внутри класса через его экземпляр следующим образом:
let myDog = Dog()
myDog.name
myDog.breed
myDog.tailLength
прописываем экземпляр класса и после ставим точку, это как тропинка к свойствам класса, они нам все доступны, и если вы запустите проект и посмотрите на правое окно, то вы увидите значения этих свойств:
Давайте нашему новому “пёселю” зададим имя, породу и длину хвоста:
let myDog = Dog()
myDog.name = "Toby"
myDog.breed = "Labradane"
myDog.tailLength = 40
Теперь у нас в памяти хранится собака со всеми характеристиками, то есть мы на основе шаблона Dog создали конкретную собаку:
И мы можем воспользоваться всеми этими свойствами в дальнейшей логике:
let myDog = Dog()
myDog.name = "Toby"
myDog.breed = "Labradane"
myDog.tailLength = 40
if myDog.name.isEmpty {
print("Собака без имени!")
} else {
print("Имя собаки: \(myDog.name)")
}
Если мы запустим компилятор, то на консоли увидим сообщение: “Имя собаки: Toby”.
На основе абстрактной конструкции мы можем создать любое количество экземпляров класса:
class Dog {
var name = ""
var breed = ""
var tailLength = 0
}
let myDog = Dog()
let bulldog = Dog()
let airedaleTerrier = Dog()
Это три конкретные собаки, которые пока имеют пустые поля (свойства внутри класса с пустыми значениями), кроме первого экземпляра, ему мы уже дали имя и породу. И если сейчас заглянем в память, то это будет выглядеть примерно следующим образом: