Классы Swift
Классы Swift — это универсальные, гибкие конструкции, используемые для построения кода.
Мы можем определять свойства (константы, переменные) и методы для класса.
В отличие от других языков программирования, Swift не требует создавать отдельные файлы интерфейса и реализации для пользовательских классов. Всё, что нужно сделать, — определить класс в одном файле; система автоматически создаёт внешний интерфейс для другого кода.
Сравнение классов и структур
В Swift классы иструктурыимеют много общего. Общие черты:
- Определение свойств для хранения значений
- Определение методов для обеспечения функциональности
- Определение сабскриптов для доступа к значениям
- Определение инициализаторов для генерации значений инициализации
- Использование расширений для добавления функциональности, реализованной по умолчанию
- Соответствие протоколам для предоставления стандартной функциональности классу
По сравнению со структурами, классы также обладают следующими дополнительными возможностями:
- Наследование позволяет классу наследовать характеристики другого класса
- Приведение типов позволяет проверять и интерпретировать тип экземпляра класса во время выполнения
- Деинициализаторы позволяют экземпляру класса освободить любые выделенные ему ресурсы
- Подсчёт ссылок позволяет иметь несколько ссылок на экземпляр класса
Синтаксис:
class classname {
Definition 1
Definition 2
……
Definition N
}
Определение класса
class student{
var studname: String
var mark: Int
var mark2: Int
}
Создание экземпляра класса:
let studrecord = student()
Пример
import Cocoa
class MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
class studentMarks {
var mark = 300
}
let marks = studentMarks()
print("成绩为 \(marks.mark)")
Вывод вышеприведённой программы:
成绩为 300
Доступ к свойствам класса как к ссылочным типам
Доступ к свойствам класса можно получить через.. Формат:instantiatedClassName.propertyName:
import Cocoa
class MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
class studentMarks {
var mark1 = 300
var mark2 = 400
var mark3 = 900
}
let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")
Вывод вышеприведённой программы:
Mark1 is 300 Mark2 is 400 Mark3 is 900
Операторы идентичности
Поскольку классы являются ссылочными типами, несколько констант и переменных могут ссылаться на один и тот же экземпляр класса за кулисами.
Чтобы определить, ссылаются ли две константы или переменные на один и тот же экземпляр класса, Swift имеет два встроенных оператора идентичности:
| Оператор идентичности | Оператор неидентичности |
|---|---|
| Оператор: === | Оператор: !== |
| Возвращает true, если две константы или переменные ссылаются на один и тот же экземпляр класса | Возвращает true, если две константы или переменные ссылаются на разные экземпляры класса |
Пример
import Cocoa
class SampleClass: Equatable {
let myProperty: String
init(s: String) {
myProperty = s
}
}
func ==(lhs: SampleClass, rhs: SampleClass) -> Bool {
return lhs.myProperty == rhs.myProperty
}
let spClass1 = SampleClass(s: "Hello")
let spClass2 = SampleClass(s: "Hello")
if spClass1 === spClass2 {// false
print("引用相同的类实例 \(spClass1)")
}
if spClass1 !== spClass2 {// true
print("引用不相同的类实例 \(spClass2)")
}
Вывод вышеприведённой программы:
引用不相同的类实例 SampleClassДругие расширения