2016-01-03 9 views
28

Ich bin etwas verwirrt über die Verwendung von statische Stichwort in swift. Wie wir wissen, führt schnell lassen Sie Schlüsselwort, um unveränderliche Objekte zu deklarieren. Wie die ID einer Tabellenansichtszelle zu deklarieren, die sich höchstwahrscheinlich während ihrer Lebensdauer nicht ändert. Nun, was ist die Verwendung von statischen Schlüsselwort in irgendeiner Deklaration der Struktur wie:Was ist das "statische" Schlüsselwort, wenn "let" Schlüsselwort verwendet wird, um Konstanten/immutables in swift zu definieren?

struct classConstants 
{ 
    static let test = "test" 
    static var totalCount = 0 
} 

während lassen Stichwort Sie die same.In Objective C wir statisch verwendet, um einige konstant wie

static NSString *[email protected]"cellId"; 
zu erklären

Neben dem macht mich mehr neugierig ist die Verwendung von statische Schlüsselwort zusammen mit lassen und auch var keyw ord. Kann mir jemand erklären, wo ich dieses statische Keyword verwenden soll? Noch wichtiger, brauchen wir wirklich statische in swift?

+7

Wenn Sie nicht wissen, was statische ist, würde ich Ihnen empfehlen, einige OOP Buch vor dem Schreiben in swift zu lesen. statische Variable wird zwischen allen Instanzen eines Objekts geteilt, wenn es const (let) ist, dann ist es einfach unveränderlich –

+4

@DanielKrom: Nach meinem Verständnis habe ich statische verwendet, um einige Konstanten in C, Objective C zu deklarieren. Ich habe keine Wissen darüber hinaus. Also, ich dachte ** lass ** und ** statisch ** sind gleich. – Poles

+4

in C und Objective-C Statik sind keine Konstanten (außer Sie definieren sie als Konstanten), Sie haben wahrscheinlich nicht gut verstanden und es ist in Ordnung, niemand ist mit Wissen geboren, Statik sind eine Art von globalen Variablen –

Antwort

59

Ich werde sie für Sie brechen:

  • var: verwendet, um eine Variable zu erstellen
  • let: verwendet eine erstellen Konstante
  • static: gebraucht mit erstellen type properties entweder let oder var

Jetzt können Sie kombinieren, um das gewünschte Ergebnis zu bekommen:

  • static let key = "API_KEY": type-Eigenschaft, die konstant ist
  • static var cnt = 0: type-Eigenschaft, die eine variable
  • let id = 0 ist: Konstante
  • var price = 0: variable

So var alles zusammenfassen und lassen Veränderbarkeit bei statischem und fehlendem Definitionsumfang definieren. Sie können static var verwenden, um zu verfolgen, wie viele Instanzen Sie erstellt haben, während Sie möglicherweise nur var für einen Preis verwenden möchten, der sich von Objekt zu Objekt unterscheidet. Hoffe, das klärt die Dinge ein wenig auf.

Beispielcode:

class MyClass{ 
    static let typeProperty = "API_KEY" 
    static var anotherTypeProperty = 0 
    var price = 9.99 
    let id = 5 
} 
+0

"let': verwendet, um eine Konstante" => Variable zu erstellen, die mit 'let' Schlüsselwort deklariert wird, kann (nur einmal) später (d. H. Im Konstruktor) zugewiesen werden, was im Widerspruch zu der Definition von CONSTANT steht. Wenn wir mit anderen Sprachen wie C# vergleichen, dann ist "let" dasselbe wie C# 'readonly' (nicht' const') –

0

den Unterschied zwischen Typ Eigenschaften und/oder Methoden und Klasseneigenschaften und/oder Verfahren, um zu sehen, schauen Sie bitte in diesem selbsterklärend Beispiel von Apple docs

class SomeClass { 
    static var storedTypeProperty = "Some value." 
    static var computedTypeProperty: Int { 
     return 27 
    } 
    class var overrideableComputedTypeProperty: Int { 
     return 107 
    } 
} 

Statische Eigenschaften können nur für den Typ, nicht global deklariert werden. Mit anderen Worten, static property === type-Eigenschaft in Swift. Um die Eigenschaft type zu deklarieren, müssen Sie das Schlüsselwort static verwenden.

+0

Sie erklären statisch, indem Sie static selbst verwenden. Das OP ist sich seiner Bedeutung nicht wirklich bewusst ... – Honey

+2

@ asma22 ?? Das Keyword static hat in der Sprache swift und c eine völlig andere Bedeutung. Static in swift bedeutet "type" (Eigenschaft oder Funktion). Der Unterschied zwischen der Eigenschaft 'static' und der Eigenschaft 'class' besteht darin, dass die 'class'-Eigenschaft oder -Funktion überschrieben werden kann,' static 'kann nicht oweriden sein. Da die meisten Menschen mit Hintergrund verwenden "statisch" in einem anderen Kontext, apples commensing zu verwenden "Typ" Wort für die Erklärung, auch wenn das Schlüsselwort ist "statisch" – user3441734

+1

Bitte bearbeiten Sie Ihre Antwort mit Ihrem Kommentar, damit ich es upvote .... – Honey

12

Eine statische Variable wird von allen Instanzen einer Klasse gemeinsam genutzt.Werfen Sie dieses Beispiel auf dem Spielplatz:

class Vehicle { 
    var car = "Lexus" 
    static var suv = "Jeep" 
} 

// changing nonstatic variable 
Vehicle().car // Lexus 
Vehicle().car = "Mercedes" 
Vehicle().car // Lexus 

// changing static variable 
Vehicle.suv // Jeep 
Vehicle.suv = "Hummer" 
Vehicle.suv // Hummer 

Wenn Sie die Variable für die statische Eigenschaft ändern, wird diese Eigenschaft nun in allen zukünftigen Instanzen geändert.

+1

Ihre Antwort sollte oben sein –

6

Statische Variablen gehören zu einem Typ und nicht zur Instanz der Klasse. Sie können auf die statische Variable zugreifen, indem Sie den vollständigen Namen des Typs verwenden.

Code:

class IOS { 

    var iosStoredTypeProperty = "iOS Developer" 

    static var swiftStoredTypeProperty = "Swift Developer" 

} 

//Access the iosStoredTypeProperty by way of creating instance of IOS Class 

let iOSObj = IOS() 

print(iOSObj.iosStoredTypeProperty) // iOS Developer 


//print(iOSObj.swiftStoredTypeProperty) 
//Xcode shows the error 
//"static member 'swiftStoredTypeProperty' cannot be used on instance of type IOS” 


//You can access the static property by using full name of the type 
print(IOS.swiftStoredTypeProperty) // Swift Developer 

Hope this Sie hilft ..

1

"Das Schlüsselwort let definiert eine Konstante" für Anfänger verwirrend ist, die aus C# Hintergrund kommen (wie ich). In C# Begriffe können Sie denken "Let" als "readonly" Variable.

(Antwort auf die How exactly does the “let” keyword work in Swift?)

Verwenden beide static und let zu definieren konstant

public static let pi = 3.1416   // swift 

public const double pi = 3.1416;   // C# 
public static final double pi = 3.1416 // Java  

Immer, wenn ich let verwenden Konstante zu definieren, fühlt es sich wie ich readonly von C# verwende. Also benutze ich sowohl static als auch let, um eine Konstante in swift zu definieren.

Verwandte Themen