betacode

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

  1. Что такое Struct?
  2. Struct по сравнению Class
  3. Constructor в Struct
  4. Методы и атрибуты Struct
  5. Struct и Protocol

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

5. Struct и Protocol

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