Руководство 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()
Запуск примера:

2- Struct по сравнению Class

Struct обычно используется для создания объекта чтобы сохранить значения, при этом класс используется более разнообразно. 
  1. Struct не позволяет наследовать от class или другого struct.
  2. Но 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
    
}
Запуск примера:

3- Constructor в Struct

Struct может иметь  Constructor (Метод инициализации), но не имеет  Destructor (Метод отмены объекта).
Далее указываются некоторые заметки для  Constructor:
  1. Вы можете написать один или более Constructor для struct.
  2. В 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) по ссылке:
  • TODO: LINK??

5- Struct и Protocol

Struct может наследовать от одного или более  Protocol.
  • TODO: