Руководство Swift Struct
1. Что такое Struct?
В Swift, Struct (структура) это особенный вид значения, который создает переменную, для хранения разных значений, но эти значения не связаны друг с другом.
Например, информащия о работнике включает?
- Код работника
- Имя работника
- Позиция
Вы можете создать 3 переменные, чтобы сохранить информацию работника данные выше. При этом, вы можете создать Struct, чтобы сохранить все 3 информации в единственной переменной.
Swift использует ключевое слово struct чтобы объявить Struct.
Employee.swift
import Foundation
struct Employee {
var empNumber:String
var empName:String
var position:String
// Constructor.
init(empNumber:String, empName:String, position:String) {
self.empNumber = empNumber;
self.empName = empName;
self.position = position;
}
}
Пример используя Struct:
EmployeeTest.swift
import Foundation
func test_EmployeeStruct() {
// Создать переменную вида struct Employee.
let john = Employee(empNumber:"E01",empName: "John",position: "CLERK")
print("Emp Number: " + john.empNumber)
print("Emp Name: " + john.empName)
print("Emp Position: " + john.position)
}
Изменить файл main.swift:
main.swift
import Foundation
test_EmployeeStruct()
Запуск примера:
Emp Number: E01
Emp Name: John
Emp Position: CLECK
2. Struct по сравнению Class
Struct обычно используется для создания объекта чтобы сохранить значения, при этом класс используется более разнообразно.
- Struct не позволяет наследовать от class или другого struct.
- Но Struct позволяет наследовать от 1 или более Protocol.
Если struct появляется как параметр в функции (или методе), он передается (pass) под видом значения. При этом, если объект class-а появляется как параметр в функции (или методе), он передается (pass) к ссылка (reference).
StructVsClass.swift
import Foundation
// Класс
class MyClass {
var name: String = "Abc"
}
// struct
struct MyStruct {
var name: String = "Abc"
}
// Функция, 2 параметра.
// Первый параметр является классом, второй является struct.
func passToMe( myClass: MyClass, myStruct: MyStruct) {
// Поменять значение полю 'name'.
myClass.name = "New Name"
// Невозможно поменять значение поля struct.
// (Оно является копией, и его поля становятся константой)
// myStruct.name = "New Name" ***
}
func test_passToMe() {
// Объект у MyClass.
var mc = MyClass()
print("mc.name = \(mc.name)") // Abc
// Значение у MyStruct.
var ms = MyStruct()
print("Call passToMe function")
// Передать параметры в функцию passToMe()
// Примечание: Первый параметр не требует марку (Label).
passToMe( mc, myStruct: ms)
print("mc.name = \(mc.name)") // New Name
}
Запуск примера:
mc.name = Abc
Call passToMe function
mc.name = New Name
3. Constructor в Struct
Struct может иметь Constructor (Метод инициализации), но не имеет Destructor (Метод отмены объекта).
Далее указываются некоторые заметки для Constructor:
- Вы можете написать один или более Constructor для struct.
- В Constructor вам нужно прикрепить значения для всех полей не имеющих значение.
4. Методы и атрибуты Struct
Struct может иметь методы (method), и свойства (property):
Book.swift
import Foundation
struct Book {
// Property
var title:String {
get {
return self.title;
}
set (value) {
self.title = value
}
}
// Property
var author:String {
get {
return self.author;
}
set(value) {
self.author = value;
}
}
// Constructor.
init( title:String, author:String) {
self.title = title;
self.author = author;
}
// Method.
func getInfo() -> String {
return "Book Title: " + self.title + ", Author: " + self.author;
}
}
Смотрите далее о свойствах (Property) по ссылке:
- Swift Properties