Swift - Struktury

Swift 4 zapewnia elastyczny blok konstrukcyjny umożliwiający używanie konstrukcji jako struktur. Korzystając z tych struktur, można raz zdefiniować metody i właściwości konstrukcji.

W przeciwieństwie do C i Objective C

  • Struktura nie musi wymagać plików implementacyjnych i interfejsu.

  • Struktura pozwala nam stworzyć pojedynczy plik i automatycznie rozszerzyć jego interfejs na inne bloki.

W Structure wartości zmiennych są kopiowane i przekazywane w kolejnych kodach przez zwrócenie kopii starych wartości, aby nie można było ich zmienić.

Składnia

Structures are defined with a 'Struct' Keyword.
struct nameStruct {
   Definition 1
   Definition 2
   ---
   Definition N
}

Definicja konstrukcji

Rozważmy na przykład, załóżmy, że musimy uzyskać dostęp do rekordu uczniów zawierającego oceny z trzech przedmiotów i znaleźć w sumie trzy przedmioty. Tutaj markStruct jest używany do inicjalizacji struktury z trzema znacznikami jako typem danych „Int”.

struct MarkStruct {
   var mark1: Int
   var mark2: Int
   var mark3: Int
}

Dostęp do struktury i jej właściwości

Dostęp do członków struktury uzyskuje się za pomocą nazwy struktury. Instancje struktury są inicjowane za pomocą słowa kluczowego „let”.

struct studentMarks {
   var mark1 = 100
   var mark2 = 200
   var mark3 = 300
}

let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

Mark1 is 100
Mark2 is 200
Mark3 is 300

Oceny uczniów są dostępne po nazwie struktury „studentMarks”. Składowe struktury są inicjowane jako mark1, mark2, mark3 z wartościami typu integer. Następnie struktura studentMarks () jest przekazywana do 'marks' za pomocą słowa kluczowego 'let'. Odtąd „znaki” będą zawierały wartości elementów konstrukcji. Teraz wartości są drukowane po uzyskaniu dostępu do wartości elementów struktury za pomocą „.” z jego zainicjowanymi nazwami.

struct MarksStruct {
   var mark: Int

   init(mark: Int) {
      self.mark = mark
   }
}

var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct     // aStruct and bStruct are two structs with the same value!
bStruct.mark = 97

print(aStruct.mark)      // 98
print(bStruct.mark)      // 97

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

98
97

Najlepsze praktyki użytkowania konstrukcji

Język Swift 4 zapewnia funkcjonalność definiowania struktur jako niestandardowych typów danych do budowania bloków funkcyjnych. Instancje struktury są przekazywane przez jej wartość do zdefiniowanych bloków w celu dalszych manipulacji.

Potrzeba posiadania struktur

  • Hermetyzacja prostych wartości danych.

  • Aby skopiować zhermetyzowane dane i związane z nimi właściwości za pomocą „wartości” zamiast „odniesień”.

  • Struktura „Kopiuj” i „Odnośnik”.

Struktury w Swift 4 przekazują swoim członkom swoje wartości, a nie referencje.

struct markStruct {
   var mark1: Int
   var mark2: Int
   var mark3: Int

   init(mark1: Int, mark2: Int, mark3: Int) {
      self.mark1 = mark1
      self.mark2 = mark2
      self.mark3 = mark3
   }
}

var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
print(marks.mark1)
print(marks.mark2)
print(marks.mark3)

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

98
96
100

Inny przykład

struct markStruct {
   var mark1: Int
   var mark2: Int
   var mark3: Int
   
   init(mark1: Int, mark2: Int, mark3: Int) {
      self.mark1 = mark1
      self.mark2 = mark2
      self.mark3 = mark3
   }
}

var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)

print(fail.mark1)
print(fail.mark2)
print(fail.mark3)

Gdy uruchomimy powyższy program za pomocą placu zabaw, otrzymamy następujący wynik -

34
42
13

Strukturę „markStruct” definiuje się najpierw za pomocą jej elementów składowych mark1, mark2 i mark3. Teraz zmienne klas składowych są inicjalizowane do przechowywania wartości całkowitych. Następnie tworzona jest kopia elementów struktury za pomocą słowa kluczowego „self”. Po utworzeniu kopii prętów konstrukcji blok strukturalny wraz ze znacznikami parametrów jest przekazywany do zmiennej „marks”, która będzie teraz przechowywać oceny uczniów. Następnie znaki są drukowane jako 98, 96, 100. W następnym kroku dla tych samych elementów konstrukcji używa się innego wystąpienia o nazwie „niepowodzenie”, aby wskazać te same elementy konstrukcji różnymi znakami. Następnie wyniki są teraz drukowane jako 34, 42, 13. To jasno wyjaśnia, że ​​struktury będą miały kopię zmiennych składowych, a następnie przekażą składowe do swoich przyszłych bloków funkcyjnych.