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?
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.
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.
Eigenschaften in Objective-C entsprechen Eigenschaften in Swift. Es gibt zwei Möglichkeiten, Eigenschaften in Objective-C und Swift zu implementieren:
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.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).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.
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)
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