Swift ha rilasciato la convenzione del prefisso di sottolineatura per le variabili di istanza, ad esempio _window? Se è così, perché?Prefisso chiave di sottolineatura Swift istanza?
risposta
In Objective-C quando si dichiara una proprietà @synthesize creerebbe automaticamente getter e setter automaticamente dal clang 3.2. Così, il @synthesize predefinito per una proprietà "pippo" sarebbe simile a questa:
@synthesize foo = _foo
a causa di quella _foo sarebbe quindi l'iVar. In altre parole si potrebbe avere fatto il @synthesize te stesso e ha chiamato l'iVar qualunque ti è piaciuto:
@synthesize foo = myiVarFoo
quindi in questo caso non v'è alcun "_"
Così ora a Swift da the documentation:
Swift unifica questi concetti in una singola dichiarazione di proprietà. Una proprietà Swift non ha una variabile di istanza corrispondente e non è possibile accedere direttamente al backing store di una proprietà.
Quindi dalla documentazione è chiaro che swift non ha una variabile di istanza corrispondente quindi non è più necessario avere il "_" in giro.
Il prefisso di sottolineatura era destinato a non confondere la variabile di istanza _foo
con il suo getter foo
.
In rapida non c'è distinzione tra ivar e getter. Invece hai solo proprietà, rendendo la convenzione _
non necessaria.
esistono ancora scenari in cui una proprietà privata - che idealmente ha lo stesso nome di un getter - potrebbe essere utile. Poiché le proprietà memorizzate non possono essere sovrascritte, potrebbe essere utile avere una superclasse che fornisce un metodo di stub, ad esempio foo(), che deve essere sovrascritto dalla sottoclasse. Il metodo sottoclasse potrebbe semplicemente restituire _foo. –
Apple utilizza ancora _
nel suo codice di codice Xcode come convenzione per una variabile non-public
. Vedrete un modello come ad esempio:
class Foo {
var _bar : Bar? = nil
var bar : Bar {
if _bar == nil {
/* compute some stuff */
_bar = Bar (/* ... */)
}
return _bar!
}
}
in cui l'accesso alla proprietà è destinata ad essere attraverso la proprietà calcolata bar
. Lo trovi nei modelli Apple CoreData.
Ciò rende molto più semplice la conversione del mio vecchio codice. Bello. – sudo
Il trattino basso viene utilizzato per disattivare la denominazione esplicita di un parametro. Dato che il compilatore Swift non è esattamente indulgente, è improbabile che ciò possa costituire una svista. Piuttosto Apple intendeva - almeno per il momento - che la sottolineatura fosse una sintassi valida del nome della variabile. –
La risposta è no perché al momento non ci sono "variabili di istanza" in Swift. Solo proprietà (proprietà memorizzate e proprietà calcolate).
Direi che questa convenzione _underscoreName è stata rilasciata (anche se alcuni modelli Apple ce l'hanno ancora).
Le "Proprietà memorizzate pigro" di Swift rendono questi non necessari. Questo post:
http://mikebuss.com/2014/06/22/lazy-initialization-swift/
spiega bene.
- 1. Prefisso di sottolineatura sulle variabili membro. intellisense
- 2. Swift: Classe prefisso necessario?
- 3. non corretta chiave prefisso MySQL
- 4. Sovraccarico istanza [chiave] + = val
- 5. Cosa significa questa sottolineatura in Swift?
- 6. Swift UIButton - Come rimuovere la sottolineatura?
- 7. NDB proiezione di istanza Chiave o ID
- 8. Funzioni di estensione prefisso
- 9. cliente Mongo non può collezioni di accesso prefisso un carattere di sottolineatura
- 10. Couchbase - recupero di più documenti utilizzando il prefisso chiave
- 11. Qual è il prefisso di sottolineatura per il nome del file Python?
- 12. Variabili di istanza di override rapide
- 13. Ottieni istanza di ViewController da AppDelegate in Swift
- 14. Quando si esegue un trattino di sottolineatura davanti a una variabile di istanza?
- 15. Errore del compilatore "Ambiguo uso del prefisso" con Swift 3
- 16. Digitare la parola chiave nelle dichiarazioni di classe e istanza
- 17. Perché i callback di ActiveRecord richiedono che le variabili di istanza oi metodi di istanza siano preceduti da una parola chiave self?
- 18. di Django doppia sottolineatura
- 19. Come inizializzare una nuova istanza NSDocument in Swift?
- 20. cos'è la parola chiave "as" in swift
- 21. Verificare se una matrice di oggetti ha un valore di chiave utilizzando il carattere di sottolineatura
- 22. Code First Entity Framework aggiunge un trattino di sottolineatura a un nome di colonna chiave primaria
- 23. loop in modello di sottolineatura js
- 24. Significato di doppia sottolineatura all'inizio
- 25. Notepad ++ con tag di sottolineatura
- 26. comprensione di sottolineatura del isNaN
- 27. XStream e caratteri di sottolineatura
- 28. di riferimento come chiave nel dizionario rapida
- 29. Compile percorso della chiave di tempo il check-in Swift
- 30. Sort Swift Array of Dizionari per valore di una chiave
Le risposte sottostanti sono degne di una "risposta"? – GoZoner
Certo, ne ho selezionato uno. – ma11hew28
La cosa che mi infastidisce di questo è che la proprietà rapida può apparentemente essere accessibile con o senza riferimento a sé. Quindi, se vedi una variabile chiamata "count", non c'è modo di determinare a colpo d'occhio se si tratta di una variabile di istanza o di una variabile locale (di cui sono a conoscenza). E le variabili di istanza possono essere "fuori ambito" dalle variabili locali! Argh. $ 5 dice che la notazione di sottolineatura tornerà per Swift 3. – dave