codestory

Die Anleitung zu Swift Struct

  1. Was ist Struct ?
  2. Der Vergleich zwischen Struct und  Class
  3. Constructor vom Struct
  4. Die Methode und das Attribute vom Struct
  5. Struct und Protocol

1. Was ist Struct ?

In Swift ist Struct (structure) eine besondere Wert. Es erstellt eine Variable um viele einzelnen Werte zu speichern. Und diese Wert hat die Beziehungen zu einander
Zum Beispiel: Die Information von einem Arbeitnehmer schließt ... ein:
  • Die Code des Arbeitnehmer
  • Der Name des Arbeitnehmer
  • Die Position
Sie können 3 Variable erstellen um die oben Information von Arbeitnehmer zu speichern. Allerdings Sie können ein Struct erstellen um die 3 obengemeinten Informationen in einer einzigen Variable zu speichern
Swift benutzt das Schlüsselwort struct um ein Struct.zu melden
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;
  }
}
Das Beispiel über die Benutzung vom Struct:
EmployeeTest.swift
import Foundation  

func test_EmployeeStruct()     { 
    // Eine Variable mit dem Typ vom struct Employee erstellen.
    let john = Employee(empNumber:"E01",empName: "John",position: "CLERK")
    
    print("Emp Number: " + john.empNumber)
    print("Emp Name: " + john.empName)
    print("Emp Position: " + john.position) 
}
Die File main.swift ändern
main.swift
import Foundation

test_EmployeeStruct()
Zum Beispiel
Emp Number: E01
Emp Name: John
Emp Position: CLECK

2. Der Vergleich zwischen Struct und  Class

Struct is oft benutzt um ein Objekt für die Wertsspeicherung zu erstellen, davon die Klasse werden mehr umfangreich benutzt.
  • Struct darf aus einer class oder einem struct erben
  • Aber Struct erlaubt, aus ein oder viele Protocol.zu erben
Wenn struct als ein Parameter in einer Funktion (oder einer Ausdruck) erscheint, wird es als die Wert übertragen (pass). Inzwischen wenn das Objekt vom class wie einen Parameter in einer Funktion (oder einer Ausdruck) erscheint, wird es als eine Reference übertragen
StructVsClass.swift
import Foundation

// Eine Klasse
class MyClass  { 
    var name: String = "Abc" 
} 
// Ein struct
struct MyStruct { 
    var name: String = "Abc" 
} 
// Eine Funktion, 2 Parameter
// Der erste Parameter ist die Klasse, der zweite Parameter ist ein struct.
func passToMe( myClass: MyClass, myStruct: MyStruct)   { 
    // Die Wert von dem Feld 'name' ändern.
    myClass.name = "New Name"
    
    // Die Wert eines Feldes von struct nicht ändern.
    // (Es ist eine Kopie, ihre Felder wird die Konstante werden)
    // myStruct.name = "New Name" ***
}  
func test_passToMe()   { 
    // Ein Objekt von MyClass.
    var  mc = MyClass()
    
    print("mc.name = \(mc.name)") // Abc
    
    // Eine Wert von MyStruct.
    var ms = MyStruct() 
    
    print("Call passToMe function")
    
    // Die Parameter in die Funktion passToMe() übertragen
    // Achtung: Der erste Parameter braucht keinen Label 
    passToMe( mc, myStruct: ms) 
    
    print("mc.name = \(mc.name)") // New Name 
}
Zum Beispiel
mc.name = Abc
Call passToMe function
mc.name = New Name

3. Constructor vom Struct

Struct kann die Constructor ( die Methode zur Erstellung des Objekt) haben, aber kein Destructor (die Methode zur Stornierung des Objekt) haben
Unten sind das einige Bemerkung über Constructor:
  • Sie können einen oder viele Constructor für struct.schreiben
  • Im Constructor müssen Sie die Werte für alle Felder ohne Werte zuweisen.

4. Die Methode und das Attribute vom Struct

Struct kann viele (method) und Eigenschaften (property) haben
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;
   }
}
Sehen Sie über die Eigenschaften (Property) bei ...:
  • Swift Properties

5. Struct und Protocol

Struct kann aus einem oder vielem Protocol erben.
  • TODO: