Latest web development tutorials

Swift Eigenschaft

Swift Eigenschaftswert mit einer bestimmten Klasse, Struktur oder Aufzählungs Verein.

Die Eigenschaft kann in Lagereigenschaften und berechneten Eigenschaften eingeteilt werden:

Store PropertiesBerechnung Eigenschaften
Als Beispiel für konstanten oder variablen Speicherteil Berechnet (und nicht zu speichern) ein Wert
Für die Klassen und Strukturen Für Klassen, Strukturen und Aufzählungen

Lagerungseigenschaften und Eigenschaften werden in der Regel verwendet, um die Instanzen eines bestimmten Typs zu berechnen.

Eigenschaften können auch direkt in der Art selbst verwendet werden, ist diese Eigenschaft type-Attribut bezeichnet.

Alternativ können Sie die Eigenschaften Beobachter definieren Änderungen der Immobilienwerte zu überwachen, um eine benutzerdefinierte Operation auszulösen. Attribut-Viewer können hinzugefügt werden, ihre eigenen Speicherattribut zu schreiben kann von der übergeordneten Klasse geerbt zu den Eigenschaften hinzugefügt werden.


Store Properties

In einfachen Worten, ist ein Speicherattribut eine Konstante oder Variable in der Instanz einer bestimmten Klasse gespeichert oder innere Struktur.

Speichereigenschaft kann eine Variable Speicherattribute (durch das Schlüsselwort var definiert) sein, es kann auch eine konstante Speicherattribute sein (definiert durch das Schlüsselwort lassen).

  • Sie können einen Standardwert in der Eigenschaft angeben, wenn die Definitionen gespeichert werden

  • Sie können auch den gespeicherten Wert der Eigenschaft während der Bauphase einzustellen oder zu verändern und sogar den Wert des konstanten Speichereigenschaft ändern

import Cocoa

struct Number
{
   var digits: Int
   let pi = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.pi)")

Die obige Programmausführung Ausgabe ist:

67
3.1415

Betrachten Sie den folgenden Code:

let pi = 3.1415

Code pi Standardwerte angeben, in der Definition Attribut gespeichert, wenn (pi = 3,1415), also egal, wenn Sie die Struktur instanziiert, wird es nicht ändern.

Wenn Sie eine Konstante Speichereigenschaft definieren, wird es sich beschweren, wenn Sie ändern versuchen, wie folgt:

import Cocoa

struct Number
{
    var digits: Int
    let numbers = 3.1415
}

var n = Number(digits: 12345)
n.digits = 67

print("\(n.digits)")
print("\(n.numbers)")
n.numbers = 8.7

Das obige Programm-Ausführungsfehler ist der Fehler wie folgt:

error: cannot assign to property: 'numbers' is a 'let' constant
n.numbers = 8.7

Bedeutung "Zahlen" eine Konstante ist, man kann es nicht ändern.


Verzögerung Speichereigenschaften

Verzögerungsspeicherattribut bezieht sich auf das erste Mal, wenn die Eigenschaft seinen Anfangswert genannt wird, berechnet werden.

Bevor Sie diefaulen Attribut - Deklaration mit einer Verzögerung Speichereigenschaften zeigen.

Hinweis:
Verzögerung Speicher Eigenschaft muss als Variable deklariert werden (mit dem var Schlüsselwort), da der Wert der Immobilie kann vor dem Instanzkonstruktors nicht abgeschlossen werden. Die konstante Eigenschaft vor dem Bau beendet ist, muss einen Anfangswert haben, und kann daher nicht als verzögert Eigentum deklariert werden.

Verzögerung Speichereigenschaften werden in der Regel verwendet:

  • Verzögerung der Erstellung von Objekten.

  • Wenn der Wert der Immobilie hängt von der anderen unbekannten Klasse

import Cocoa

class sample {
    lazy var no = number() // `var` 关键字是必须的
}

class number {
    var name = "w3big Swift 教程"
}

var firstsample = sample()
print(firstsample.no.name)

Die obige Programmausführung Ausgabe ist:

w3big Swift 教程

Beispiele der Variablen

Wenn Sie Erfahrung in Objective-C gehabt haben, sollten Sie Objective-C-Klasse Instanz Speicherwert und Referenz bietet zwei Methoden kennen. Für die Eigenschaft, kann es auch als Backend Instanzvariablen verwendet werden Eigenschaftswerte zu speichern.

Swift Programmiersprache diese Theorien zu verwenden, um eine einheitliche Eigenschaft zu erreichen. Swift-Attribute keine entsprechenden Instanzvariablen, Back-End-Speichereigenschaften können nicht direkt zugegriffen werden. Dies vermeidet die Probleme von Zugriffsmethoden unter verschiedenen Szenarien, sondern auch die Definition des Eigentums als eine Erklärung zu vereinfachen.

Alle Informationen in einer Art von Eigentum - einschließlich Name, Typ und Speicher-Management-Funktionen - alles in einem einzigartigen Ort (Typdefinition) Definitionen.


Berechnung Eigenschaften

Neben Speicherattribute, Kategorien, Strukturen und Aufzählungen können Eigenschaftswerte definiert werden , um zu berechnen , berechnet Attribut wird direkt gespeichert, sondern einen Getter zu schaffen , um den Wert eines optionalen Setter erhalten den Wert anderer Eigenschaften oder indirekten Variablen zu setzen.

import Cocoa

class sample {
    var no1 = 0.0, no2 = 0.0
    var length = 300.0, breadth = 150.0
    
    var middle: (Double, Double) {
        get{
            return (length / 2, breadth / 2)
        }
        set(axis){
            no1 = axis.0 - (length / 2)
            no2 = axis.1 - (breadth / 2)
        }
    }
}

var result = sample()
print(result.middle)
result.middle = (0.0, 10.0)

print(result.no1)
print(result.no2)

Die obige Programmausführung Ausgabe ist:

(150.0, 75.0)
-150.0
-65.0

Wenn die berechnete Eigenschaft Setter nicht den Parameternamen den neuen Wert repräsentiert definieren, können Sie den Standardnamen verwenden newValue.


Read-only-Attribut Berechnung

Nur berechnet Getter nicht Eigentum Setter ist ein Nur-Lese-Berechnung zuzuschreiben.

Read-only Eigenschaft immer einen berechneten Wert zurückgibt, Operator (.) Für den Zugriff über den Punkt, kann aber nicht den neuen Wert eingestellt.

import Cocoa

class film {
    var head = ""
    var duration = 0.0
    var metaInfo: [String:String] {
        return [
            "head": self.head,
            "duration":"\(self.duration)"
        ]
    }
}

var movie = film()
movie.head = "Swift 属性"
movie.duration = 3.09

print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)

Die obige Programmausführung Ausgabe ist:

Swift 属性
3.09

Hinweis:

Sie müssen das verwenden var Schlüsselwort berechnete Attribute zu definieren, einschließlich Nur - Lese-Berechnung zuschreiben, weil ihr Wert nicht festgelegt ist. let Sie nur ein Schlüsselwort verwendet wird , ein konstantes Attribut zu deklarieren , die nicht nach der Initialisierung Wert geändert werden kann.


Property Observer

Ändern Attribut-Viewer und auf Eigenschaftswert reagieren zu überwachen jede Eigenschaft festgelegt wird, wenn der Wert der Immobilie wird zu beobachten genannt werden, und auch der neue Wert und dem aktuellen Wert der gleichen Zeit ist keine Ausnahme.

Sie können Objekte, die dem Betrachter neben dem Verzögerungsspeicher hinzufügen andere Attribut als Speichereigenschaften können auch Attribute Beobachter für eine vererbte Vermögen (einschließlich der Speicher- und Rechen Eigenschaft Attribute) durch zwingende Attribut Arten hinzufügen.

Hinweis:
Sie brauchen nicht eine Eigenschaft Beobachter für die Berechnung der Eigenschaften nicht überlastet werden können, hinzufügen, da Sie direkt auf Veränderungen Setter Wert überwachen und darauf reagieren können.

Sie können für die Eigenschaft eines oder alle der folgenden Beobachter hinzu:

  • willSet bevor Sie einen neuen Wert Anrufeinstell-
  • didSet , nachdem ein neuer Wert gesetzt wird sofort anrufen
  • willSet und didSet Beobachter wird nicht in der Initialisierung Eigenschaft aufgerufen werden
import Cocoa

class Samplepgm {
    var counter: Int = 0{
        willSet(newTotal){
            print("计数器: \(newTotal)")
        }
        didSet{
            if counter > oldValue {
                print("新增数 \(counter - oldValue)")
            }
        }
    }
}
let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800

Die obige Programmausführung Ausgabe ist:

计数器: 100
新增数 100
计数器: 800
新增数 700

Globale und lokale Variablen

Berechnungsmodus Attribute und Beobachter beschrieben wurden, können auch für globale und lokale Variablen verwendet werden.

Lokale Variablenglobale Variablen
In der Funktion, Methode oder interne Schließungen Variablen definiert. Variable außerhalb der Funktion, Methode oder jede Art von Verschluss Definition.
Zum Speichern und Abrufen von Werten. Zum Speichern und Abrufen von Werten.
Lagerung Immobilie zu erhalten und den Wert festgelegt. Lagerung Immobilie zu erhalten und den Wert festgelegt.
Auch verwendet, um Eigenschaften zu berechnen. Auch verwendet, um Eigenschaften zu berechnen.

Art der Immobilie

Type-Attribut wird als Teil des in der Art definiert der äußersten geschweiften Klammern zu schreiben ({}) im Inneren.

Verwenden Sie das Schlüsselwort static das type-Attribut-Wert-Typ, Klasse Schlüsselwort zu definieren eine Klasse type-Attribut zu definieren.

struct Structname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

enum Enumname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

class Classname {
   class var computedTypeProperty: Int {
      // 这里返回一个 Int 值
   }
}

Hinweis:
Computational Beispiel des type-Attribut ist schreibgeschützt, aber Sie können auch rechen lesbar und beschreibbar type-Attribut Syntax ähnliche Berechnung mit dem Instanzattribut definieren.


Holen und den Wert von der Art der Eigenschaft

Beispiele für ähnliche Eigenschaften, die Art des Zugriffs auf die Eigenschaft wird von der Punkt-Operator durchgeführt (.). Allerdings ist die Art der Immobilie, um durchzukommen und den Typ selbst, anstatt beispielhaft. Beispiele sind wie folgt:

import Cocoa

struct StudMarks {
   static let markCount = 97
   static var totalCount = 0
   var InternalMarks: Int = 0 {
      didSet {
         if InternalMarks > StudMarks.markCount {
            InternalMarks = StudMarks.markCount
         }
         if InternalMarks > StudMarks.totalCount {
            StudMarks.totalCount = InternalMarks
         }
      }
   }
}

var stud1Mark1 = StudMarks()
var stud1Mark2 = StudMarks()

stud1Mark1.InternalMarks = 98
print(stud1Mark1.InternalMarks) 

stud1Mark2.InternalMarks = 87
print(stud1Mark2.InternalMarks)

Die obige Programmausführung Ausgabe ist:

97
87