Руководство Swift Struct

1- What is 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()     {
    
    // Create a variable from Employee struct
    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 vs Class

Struct обычно используется для создания объекта чтобы сохранить значения, при этом класс используется более разнообразно. 
  1. Struct не позволяет наследовать от class или другого struct.
  2. Но Struct позволяет наследовать от 1 или более Protocol.
Если  struct появляется как параметр в функции (или методе), он передается (pass) под видом значения. При этом, если объект  class-а появляется как параметр в функции (или методе), он передается (pass) к ссылка (reference).
StructVsClass.swift
import Foundation

// A class
class MyClass  {
   
   var name: String = "Abc"
   
}

// A struct
struct MyStruct {
   
   var name: String = "Abc"

}


// A function, 2 parameters, a class and a struct.
func passToMe( myClass: MyClass, myStruct: MyStruct)   {
   
   // Change value to name field.
   myClass.name = "New Name"
   
   // Can not change value to field of this struct.
   // (It is a copy,its fields become constants and can not be changed.
   // myStruct.name = "New Name" ***
   
}


func test_passToMe()   {
   
   // An object of MyClass.
   var  mc = MyClass()
   
   print("mc.name = \(mc.name)") // Abc
   
   // A value of MyStruct.
   var ms = MyStruct()
   
   
   print("Call passToMe function")
   
   // Pass to passToMe() function.
   // Note: The first parameter does not require a label (Label).
   passToMe( mc, myStruct: ms)
   
   
   print("mc.name = \(mc.name)") // New Name
   
}
Запуск примера:

3- Constructor of Struct

Struct может иметь  Constructor (Метод инициализации), но не имеет  Destructor (Метод отмены объекта).
Далее указываются некоторые заметки для  Constructor:
  1. Вы можете написать один или более Constructor для struct.
  2. В Constructor вам нужно прикрепить значения для всех полей не имеющих значение.

4- Methods and properties of 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 and Protocol

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