Классы 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
Другие расширения