Swift является объектно-ориентированным языком, а значит позволяет представить программу как набор взаимодействующих между собой объектов.
Ключевым моментом для построения объектно-ориентированного дизайна является возможность абстрагироваться от конкретных взаимодействий в программе, от конкретных предметов и явлений с помощью абстрактных конструкций. В языке Swift такими абстрактными конструкциями являются классы, структуры и перечисления. Сначала мы рассмотрим классы, а в последующих темах затронем структуры и перечисления.
Класс является описанием объекта, а объект представляет экземпляр этого класса. Можно еще провести следующую аналогию. У нас у всех есть некоторое представление о человеке - наличие двух рук, двух ног, головы, пищеварительной, нервной системы, головного мозга и т.д. Есть некоторый шаблон - этот шаблон можно назвать классом. Реально же существующий человек (фактически экземпляр данного класса) является объектом этого класса.
Для определения класса используется ключевое слово class, после которого идет название класса:
class User { }
В данном случае класс называется User. Все тело класса заключается в фигурные скобки.
Класс может содержать переменные и константы, которые хранят состояние объекта. Переменные и константы, определенные в классе, еще называют хранимые свойства класса (stored properties). Например:
class User { var age: Int = 18 var name: String = "" }
Здесь класс User определяет две переменных age и name, которые хранят соответственно возраст и имя пользователя.
Важно отметить, что здесь не просто определяются переменные, кроме того, им присваиваются начальные значения. Все переменные и константы в классе должны быть инициализированы к моменту использования класса.
Кроме переменных и констант в классе могут определены методы. Методы представляют собой функции, ассоциированные с определенным типом - классом, перечислением или структурой:
class User { var age: Int = 18 var name: String = "" func move(){ print("\(name) передвигается") } }
После определения класса мы можем использовать его в программе, в частности, создавать его объекты:
var tom: User = User() tom.age = 22 tom.name = "Том" print(tom.name) // Том tom.move() // "Том передвигается"
Чтобы создать объект класса используется инициализатор, который представляет собой следующую конструкцию:
название_класса()
После названия класса идут пустые скобки. Эта конструкция создает объект, ссылку на который хранит переменная tom
.
Определение переменных и констант класса ничем не отличается от других переменных и констант.
После создания объекта класса мы сможем обращаться к его свойствам и методам. Для обращения к ним используется нотация точки. То есть после названия переменной tom ставится точка, после которой идет название свойства/метода:
tom.name = "Tom" tom.move()
Ключевое слово self позволяет обратиться к текущему экземпляру класса:
class User { var age: Int = 0 var name: String = "" func move(){ print("\(self.name) передвигается") } func getUserInfo(){ print("Имя: \(self.name); возраст: \(self.age)") } }