2016-01-03 22 views
28

Sono un po 'confuso sull'uso della parola chiave statica in rapido. Come sappiamo, swift introduce lascia la parola chiave per dichiarare oggetti immutabili. Come dichiarare l'id di una cella vista tabella che molto probabilmente non cambierà durante la sua vita. Ora che cosa è l'uso di statica parola chiave in qualche dichiarazione di struct come:Qual è l'uso della parola chiave "statica" se la parola chiave "let" viene utilizzata per definire costanti/immutables in swift?

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

mentre diamo parola chiave fare lo same.In Objective C abbiamo usato statica per dichiarare una costante come

static NSString *[email protected]"cellId"; 

Oltre a ciò mi rende più curioso l'uso della parola chiave statica insieme a let e var keyw ord. Qualcuno può spiegarmi dove usare questa parola chiave statica? Ancora più importante abbiamo davvero bisogno di statico in swift?

+7

Se non sai cosa sia la staticità, ti consiglio di leggere qualche libro OOP prima di iniziare a scrivere in swift. la variabile statica è condivisa tra tutte le istanze di un oggetto, se è const (let), quindi è immutabile –

+4

@DanielKrom: Come per la mia comprensione, ho usato statico per dichiarare alcune costanti in C, Objective C. Non ho un conoscenza al di là di questo. Quindi, pensavo che ** e ** e ** static ** fossero uguali. – Poles

+4

in C e Objective-C statics non sono costanti (a meno che non le definiate come costanti), probabilmente non lo avete capito bene e va bene, nessuno è nato con la conoscenza, la statica è una specie di variabile globale –

risposta

59

io li abbattere per voi:

  • var: utilizzato per creare una variabile
  • let: utilizzato per creare una costante
  • static: utilizzato per creare type properties sia con let o var

Ora è possibile combinare per ottenere l'out desiderato:

  • static let key = "API_KEY": Tipo di proprietà che è costante
  • static var cnt = 0: Tipo di proprietà che è una variabile
  • let id = 0: costante
  • var price = 0: variabile

Quindi, per riassumere tutto in su var e lasciare definisce la mutabilità statica e la mancanza di definizione dell'ambito. È possibile utilizzare static var per tenere traccia del numero di istanze create, mentre è possibile utilizzare solo var per un prezzo diverso da oggetto a oggetto. Spero che questo chiarisca un po 'le cose.

Esempio di codice:

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

"' let': usato per creare una costante "=> variabile dichiarata con la parola chiave let può essere assegnata (solo una volta) in un secondo momento (cioè nel costruttore) che è in contraddizione con la definizione di CONSTANT. Se ci confrontiamo con altri linguaggi come C# allora 'let' è uguale a C#' readonly' (non 'const') –

0

a vedere la differenza tra proprietà del tipo e/o metodi e le proprietà della classe e/o metodi, si prega di guardare a questo sé esempio esplicativo dal docs apple

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

Le proprietà statiche possono essere dichiarate solo sul tipo, non a livello globale. In altre parole proprietà static === tipo proprietà in Swift. Per dichiarare la proprietà type devi usare la parola chiave static.

+0

Stai spiegando statico usando la stessa statica. L'OP non è realmente consapevole del suo significato ... – Honey

+2

@ asma22 ?? La parola chiave static ha un significato totalmente diverso nel linguaggio rapido e c. Statico in rapido significa "tipo" (proprietà o funzione). La differenza tra la proprietà o la funzione 'statica' e 'classe' è che la proprietà o la funzione 'classe' potrebbe essere sovrascritta, 'static' non può essere owerriden. Poiché la maggior parte delle persone con sfondo usa "statico" in altri contesti, la mela comanda di usare la parola "tipo" per la spiegazione, anche se la parola chiave è "statica" – user3441734

+1

Modifica la risposta con il tuo commento in modo da poterlo invogliare .... – Honey

12

Una variabile statica è condivisa attraverso tutte le istanze di una classe.Gettare questo esempio nel parco giochi:

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 

Quando si modifica la variabile per la proprietà statica, che la proprietà è stata modificata in tutti i casi futuri.

+1

La tua risposta dovrebbe essere al top –

6

Le variabili statiche appartengono a un tipo piuttosto che a un'istanza di classe. È possibile accedere alla variabile statica utilizzando il nome completo del tipo.

Codice:

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 

Spero che questo ti aiuta ..

1

"La parola chiave let definisce una costante" è fonte di confusione per i principianti che vengono da C# sfondo (come me). In termini C#, puoi pensare a "let" come variabile "readonly".

(risposta a How exactly does the “let” keyword work in Swift?)

Usa sia static e let per definire costante

public static let pi = 3.1416   // swift 

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

Ogni volta che uso let definire costante, ci si sente come sto usando readonly di C#. Quindi, uso sia static e let per definire la costante in rapido.

Problemi correlati