betacode

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

View more Tutorials:

Сайт бесплатного изучения языков:
Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook

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

mc.name = Abc
Call passToMe function
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:

View more Tutorials: