devstory

Le Tutoriel de Swift Struct

  1. Qu'est-ce que Struct?
  2. Struct avec Class
  3. Constructeur de Struct
  4. Les méthodes et les propriétés de Struct
  5. Struct et Protocol

1. Qu'est-ce que Struct?

Dans Swift, Struct (Structure) est le code particulier et il est utilisé pour construire une variable qui instaure multiples valeurs mais ces valeurs sont liées les uns les autres.
Par exemple, l'information d'un employé(e) comprend:
  • Le numéro d'employé(e)
  • Le nom de l'employé(e)
  • Le poste
Vous pouvez créer 3 variables pour conserver ces 3 informations précitées. Mais vous pouvez créer un Struct pour les enregistrer dans un variable unique.
Swift utilise le mot- clé struct pour déclarer un 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;
  }
}
Par exemple, utilisez Struct:
EmployeeTest.swift
import Foundation  

func test_EmployeeStruct()     { 
    // Créez une variable du type 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) 
}
Editez main.swift:
main.swift
import Foundation

test_EmployeeStruct()
Exécutez l'exemple:
Emp Number: E01
Emp Name: John
Emp Position: CLECK

2. Struct avec Class

Struct est généralement usé pour créer une constante qui stocke des valeurs, alors que le class est diversement utilisé.
  • Struct ne permet pas de l'héritage d'une class ou un autre struct.
  • Mais Struct permet de l'héritage d'une ou plusieurs Protocol.
Si struct apparaît étant comme un paramètre dans une fonction ( ou une méthode), il est transmis (pass) comme une valeur. Alors que, si l'instante de class apparaît comme étant une fonction (ou une méthode), il est transmis (pass) étant comme une référence (reference).
StructVsClass.swift
import Foundation

// Une classe
class MyClass  { 
    var name: String = "Abc" 
} 
// Une struct
struct MyStruct { 
    var name: String = "Abc" 
} 
// Une fonction, 2 paramètres.
// Le premier paramètre est une classe, le deuxième est une struct.
func passToMe( myClass: MyClass, myStruct: MyStruct)   { 
    // Changez la valeur du champs 'name'.
    myClass.name = "New Name"
    
    // Impossible de changer la valeur en champ de cette structure.
    // (C'est une copie, ses champs deviennent des constantes et ne peuvent pas être changés).
    // myStruct.name = "New Name" ***
}  
func test_passToMe()   { 
    // Un objet de MyClass.
    var  mc = MyClass()
    
    print("mc.name = \(mc.name)") // Abc
    
    // Une valeur de MyStruct.
    var ms = MyStruct() 
    
    print("Call passToMe function")
    
    // Mettez des paramètres à la fonction passToMe()
    // Remarque: le premier paramètre ne nécessite pas d'étiquette. (Label).
    passToMe( mc, myStruct: ms) 
    
    print("mc.name = \(mc.name)") // New Name 
}
Exécutez l'exemple:
mc.name = Abc
Call passToMe function
mc.name = New Name

3. Constructeur de Struct

Struct peut avoir des Constructor (le Constructeur- création d'un objet), mais il n'a pas de Destructor (le Destructeur- la destruction d'un objet).
Quelque remarques à tenir concernant Constructor:
  • Vous pouvez écrire un ou plusieurs Constructor pour struct.
  • Dans Constructor, vous devez assigner une valeurs aux tout les champs qui n'ont pas de la valeur.

4. Les méthodes et les propriétés de Struct

Struct peut avoir des méthodes (method) et des propriétés (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;
   }
}
En savoir plus des propriétés (Property) à:
  • Swift Properties

5. Struct et Protocol

Struct peut hésiter d'une ou plusieurs Protocol.
  • TODO: