Класс и объект в Swift
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.
Оператор назначает объект 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