it-swarm.com.de

@ property/@ Äquivalent in SWIFT

Wir haben property deklariert, um Daten zwischen Klassen wie folgt zu übergeben:

.h file (interface file)
@property (nonatomic) double topSpeed;

.m file (implementation file)
@synthesize topSpeed;

Nun gibt es keine interface-Klasse. Wie werden Daten zwischen .Swift-Klassen übergeben?

37
Mutawe

Swift bietet keine Unterscheidung zwischen Eigenschaften und Instanzvariablen (d. H. Dem zugrundeliegenden Speicher für eine Eigenschaft). Um eine Eigenschaft zu definieren, deklarieren Sie einfach eine Variable im Kontext einer Klasse.

Eine Swift-Klasse ist einfach eine ClassName.Swift-Datei.

Sie deklarieren eine Klasse und Eigenschaften als

class SomeClass {

  var topSpeed: Double
  var aStrProperty: String
  var anIntProperty: Int

  //Initializers and other functions

}

Sie greifen auf Eigenschaftswerte über Punktnotation zu. Ab Xcode6 beta 4 gibt es auch Zugriffsmodifizierer (public, internal und private) in Swift. Standardmäßig ist jede Eigenschaft internal. Siehe hier für weitere Informationen.

Weitere Informationen finden Sie in der Swift-Programmieranleitung :

Gespeicherte Eigenschaften und Instanzvariablen

Wenn Sie Erfahrung mit Objective-C haben, wissen Sie möglicherweise, dass zwei Möglichkeiten zum Speichern von Werten und Referenzen als Teil einer Klasseninstanz . Neben den Eigenschaften können Sie Instanzvariablen als Hintergrund verwenden Speichern Sie die in einer Eigenschaft gespeicherten Werte.

Swift vereint diese Konzepte in einer einzigen Eigenschaftsdeklaration. EIN Die Swift-Eigenschaft hat keine entsprechende Instanzvariable und Auf den Sicherungsspeicher für eine Eigenschaft wird nicht direkt zugegriffen. Diese Ansatz vermeidet Verwirrung darüber, wie auf den Wert in verschiedenen .__ zugegriffen wird. Kontexte und vereinfacht die Deklaration der Eigenschaft in einem einzigen definitive Aussage. Alle Informationen über die Eigenschaft, einschließlich der Name, Typ und Speicherverwaltungsmerkmale - ist in einer .__ definiert. einzelner Standort als Teil der Typdefinition.

53
Cezar

Eigenschaften verwenden.

Aus dem Swift-Programmierhandbuch :

Gespeicherte Eigenschaften und Instanzvariablen

Wenn Sie Erfahrung mit Objective-C haben, wissen Sie möglicherweise, dass zwei Möglichkeiten zum Speichern von Werten und Referenzen als Teil einer Klasseninstanz . Neben den Eigenschaften können Sie Instanzvariablen als Hintergrund verwenden Speichern Sie die in einer Eigenschaft gespeicherten Werte.

Swift vereint diese Konzepte in einer einzigen Eigenschaftsdeklaration. EIN Die Swift-Eigenschaft hat keine entsprechende Instanzvariable und Auf den Sicherungsspeicher für eine Eigenschaft wird nicht direkt zugegriffen. Diese Ansatz vermeidet Verwirrung darüber, wie auf den Wert in verschiedenen .__ zugegriffen wird. Kontexte und vereinfacht die Deklaration der Eigenschaft in einem einzigen definitive Aussage. Alle Informationen über die Eigenschaft, einschließlich der Name, Typ und Speicherverwaltungsmerkmale - ist in einer .__ definiert. einzelner Standort als Teil der Typdefinition.

13
trojanfoe

Eigenschaften in Objective-C entsprechen Eigenschaften in Swift. Es gibt zwei Möglichkeiten, Eigenschaften in Objective-C und Swift zu implementieren:

  1. Synthetisierte/automatisch synthetisierte Eigenschaften in Objective C - diese werden in Swift "gespeicherte Eigenschaften" genannt. Sie deklarieren es einfach mit var topSpeed : Double oder let topSpeed : Double = 4.2 in einer Klassendeklaration, genau wie Sie eine lokale Variable in einem Funktionskörper deklarieren würden. Sie können den Namen der Hintergrundinstanzvariable nicht angeben, da in Swift derzeit keine Instanzvariablen vorhanden sind. Sie müssen die Eigenschaft immer anstelle der Hintergrundinstanzvariablen verwenden.
  2. Manuell implementierte Eigenschaften in Objective-C - diese werden in Swift "berechnete Eigenschaften" genannt. Sie deklarieren sie in der Klassendeklaration wie var topSpeed : Double { get { getter code here } set { setter code here } } (für readwrite-Eigenschaften) oder var topSpeed : Double { getter code here } (für readonly-Eigenschaften).
3
newacct

Das klingt so, als ob sich zumindest ein Teil Ihrer Frage auf die Kommunikation einer bestimmten Klasse mit anderen Klassen bezieht. Wie Java (und im Gegensatz zu C, C++ und Objective-C) trennt Swift die Schnittstelle nicht von der Implementierung. Sie import keine Header-Datei, wenn Sie Symbole verwenden möchten, die an anderer Stelle definiert wurden. Stattdessen import ein Modul , wie:

import Foundation
import MyClass

Um auf Eigenschaften in einer anderen Klasse zuzugreifen, importieren Sie diese Klasse.

1
Caleb

Gespeicherte Eigenschaften und Instanzvariablen

Wenn Sie Erfahrung mit Objective-C haben, wissen Sie möglicherweise, dass es zwei Möglichkeiten bietet, Werte und Referenzen als Teil einer Klasseninstanz zu speichern. Neben den Eigenschaften können Sie Instanzvariablen als Sicherungsspeicher für die in einer Eigenschaft gespeicherten Werte verwenden.

Swift vereint diese Konzepte in einer einzigen Eigenschaftsdeklaration. Eine Swift-Eigenschaft hat keine entsprechende Instanzvariable, und auf den Sicherungsspeicher für eine Eigenschaft wird nicht direkt zugegriffen. Dieser Ansatz vermeidet Verwirrung darüber, wie auf den Wert in verschiedenen Kontexten zugegriffen wird, und vereinfacht die Deklaration der Eigenschaft in eine einzige definitive Anweisung. Alle Informationen über die Eigenschaft, einschließlich Name, Typ und Speicherverwaltungsmerkmale, werden an einem einzigen Ort als Teil der Typdefinition definiert.

Aus dem Swift-Programmierbuch:

    struct FixedLengthRange {
    var firstValue: Int
    let length: Int
    }

    var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
0
Erick Gonzales

Ich sage: typealias ist in Swift für @synthesize noch gleichwertiger. 

schauen Sie sich diesen Link an: https://docs.Swift.org/Swift-book/ReferenceManual/Declarations.html

 enter image description here

0
AMH