betacode

Класс и объект в Swift

  1. Ваш первый Класс
  2. Правило вызова Constructor
  3. Оператор сравнивания объектов

1. Ваш первый Класс

Swift это язык унаследованный от языка C и Objective-C, он является и процедурным языком, и объектно-ориентированным языком. Класс (Class) является понятием объектно-ориентированного языка. Класс имеет атрибуты и методы, в действительности метод (method) понимается как функция класса. Из класса вы можете создать объекты.
Swift использует ключевое слово class чтобы объявить класс.
Создать исходный файл Rectangle.swift:
Rectangle.swift
import Foundation 

class Rectangle  { 
    // width property
    var width: Int = 5; 
    // height property
    var height: Int = 10;
    
    // Constructor по умолчению (Нет параметра)
    // (Можно использовать для создания объекта)
    init()  {
        
    } 
    // Один Constructor имеет 2 параметра.
    // (Можно использовать для создания объекта)
    // self.width уканзывается на атрибут (property) width класса.
    init (width: Int, height: Int)  {
        self.width = width
        self.height = height
        
    } 
    // Метод используется для расчета площади прямоугольника.
    func getArea()  -> Int  { 
        var area = self.width * self.height
        return area
    } 
}
Код использует класс Rectangle чтобы создать объекты.
RectangleTest.swift
import Foundation 

func test_rectangle()  { 
    print("Create a Rectangle rec1"); 
    // Создать объект Rectangle
    // через Constructor по умолчанию: init()
    var rec1  = Rectangle() 
    
    // Распечатать width, height.
    print("rec1.width = \(rec1.width)")
    print("rec1.height = \(rec1.height)")
    
    // Вызвать метод для расчета площади.
    var area1 = rec1.getArea() 
    print("area1 = \(area1)") 
    print("---------") 
    print("Create a Rectangle rec2");
    
    // Создать объект Rectangle
    // через Constructor с 2 параметрами: init(Int,Int)
    var rec2 = Rectangle(width: 10, height: 15) 
    
    // Распечатать width, height.
    print("rec2.width = \(rec2.width)")
    print("rec2.height = \(rec2.height)") 
    // Вызвать метод для расчета площади.
    var area2 = rec2.getArea() 
    print("area2 = \(area2)") 
}
Редактировать файл main.swift чтобы протестировать пример:
main.swift
import Foundation

test_rectangle()
Запуск примера:
Create a Rectangle rec1
rec1.width = 5
rec1.height = 10
area1 = 50
----------
Create a Rectangle rec2
rec2.width = 10
rec3.height = 15
area2 = 150
Теперь вам нужно объяснить про класс, это очень важно.
Что происходит когда вы создаете объект методом конструктора по умолчанию (default constructor)?
Создать объект Rectangle методом конструктора с 2 параметрами.

2. Правило вызова Constructor

Правила Swift 2.1 вызова йункции (function), метода (method),и конструктора (constructor):
  • Первый параметр передается функции (или методу) не требуя метки (Label)
  • Другие параметры передающиеся функции (или методу) требуется иметь метку.
  • Все параметры передающиеся в Constructor должны иметь метку (Label)

3. Оператор сравнивания объектов

В Swift, когда вы создаете объект через конструктор (Constructor) реальный объект создается в памяти, и имеет определенный адрес.

Оператор назначает объект AA объектом BB не создавая новые объекты в памяти, это просто указывающий адрес от AA до адреса BB.
Оператор === использованный для сравнения 2 указывающих объектов, возвращает true если 2 объекта указывают на одинаковый адрес в памяти. Оператор !== использованный для сравнения 2 адресов 2 указывающих объектов, возвращает true если 2 объекта указывают на 2 разных адреса.
IdentifyOperator.swift
import Foundation


func identifyOperator()    {
    
    // Создать объект: r1
    var r1 = Rectangle(width: 20,height: 10)
    
    // Создать объект: r2
    var r2 = Rectangle(width: 20,height: 10)
    
    var r3 = r1
    
    
    var  b12:Bool =   r1 === r2
    var  b13:Bool =   r1 === r3
    
    print("r1 === r2 ?  \(b12)") // false
    print("r1 === r3 ?  \(b13)") // true
    
    
    var bb12: Bool = r1 !== r2
    var bb13: Bool = r1 !== r3
    
    
    print("r1 !== r2 ?  \(b12)") // true
    print("r1 !== r3 ?  \(b13)") // false
    
}
Запуск примера:
r1 === r2 ? false
r1 === r3 ? true
r1 !== r2 ? false
r1 !== r3 ? true