Il nome dello !
mi confonde sempre: si chiama "opzionale implicitamente da scartare". Tuttavia, che cosa è implicito a riguardo? Mezzi impliciti "impliciti anche se non chiaramente espressi". Tuttavia, non aggiunge un !
chiaramente esprimere il suo scopo? Non aggiungere un !
rende esplicito ciò che stiamo cercando di realizzare?Perché è il! in Swift chiamato opzionale 'implicitamente' piuttosto che 'esplicitamente' da scartare?
risposta
Normale opzionale
var foo : Foo? = Foo()
foo!.doSomething() // explicitly unwrap it and call the method
Implicitamente Unwrapped opzionale
var foo : Foo! = Foo()
foo.doSomething() // implicitly unwrap it and call the method just like it is not optional
In entrambi i casi, è necessario qualcosa di dichiarare un optional (?
o !
). Opzionalmente Unwrapped Opzionale non aggiunge altro. Ma puoi omettere l'operatore di scartare quando lo usi.
In Swift, i punti esclamativi finali (!
) vengono utilizzati in due modi diversi. Uno si chiama Forced Unwrapping. Questo è quando si dispone di una variabile definita come opzionale e si desidera far valere in sostanza che il valore non è pari a zero in modo che si può utilizzare come se non fosse un optional:
var optionalName: String? = "World"
if optionalName != nil {
sayHelloTo(optionalString!)
}
Un modo alternativo si potrebbe descrivere "Forced Unwrapping" è "Explicit Unwrapping", ma forzato aggiunge il suggerimento in più che l'intero programma si bloccherà se proverai a "Force Unwrap" un optional che è nullo.
Il secondo è quando in realtà si dichiara il tipo di una variabile e si chiama Implicitly Unwrapped Optional. Questo è per quando si vuole dichiarare una variabile che è tecnicamente facoltativa, ma che si tratterà come se non fosse facoltativa. Ogni volta che si utilizza questo Implicitamente Unwrapped opzionale, è in realtà, facendo la "Forza Scartare" ho descritto sopra:
var name: String! = "World"
if name != nil {
sayHelloTo(name)
}
Si può ancora provare un'Implicitamente Unwrapped opzionale per nil, ma è anche possibile utilizzarlo direttamente come se non fosse facoltativo. Questo è il motivo per cui è considerato implicito. Ogni volta che lo usi, è automaticamente, implicitamente scartato per te.
Come "Scartare forzata" di un "Implicitamente Unwrapped opzionali" sarà ancora in crash l'intero programma, se si tenta di utilizzare quando è nullo
- 1. Mappa con opzionale Scartare a Swift
- 2. Tornando Tuple Da Delegato (valore di tipo opzionale non scartare)
- 3. Swift: contare array opzionale
- 4. È save() chiamato implicitamente quando si chiama create in django?
- 5. esplicitamente specificando il TaskScheduler per un metodo implicitamente prevista
- 6. Perché non è admin.autodiscover() chiamato automaticamente in Django quando si utilizza l'amministratore, perché è stato progettato per essere chiamato esplicitamente?
- 7. RestKit RKObjectMapping Swift Opzionale
- 8. self.view .presentScene: inaspettatamente trovato nulla, mentre scartare un valore opzionale (Swift)
- 9. Come utilizzare l'associazione opzionale in Swift 2
- 10. Perché è necessario chiamare esplicitamente il costruttore genitore in MSIL?
- 11. errore fatale: inaspettatamente trovato nulla, mentre scartare un valore opzionale
- 12. perché cancellare esplicitamente il costruttore?
- 13. Perché Object.defineProperty() piuttosto che this.defineProperty() (per oggetti)?
- 14. Perché è necessario eliminare esplicitamente il traceback sys.exc_info()?
- 15. Perché tornare const razionale piuttosto che razionale
- 16. proprietà di chiusura opzionale in Swift
- 17. Perché il println! funzione utilizzare un punto esclamativo in Rust?
- 18. opzionale Parametro Default a Swift
- 19. Perché il cast implicito implicito in float piuttosto che double quando si richiama il costruttore?
- 20. Perché il cacao utilizza i delegati piuttosto che l'ereditarietà?
- 21. Perché il protocollo è migliore della classe in swift?
- 22. Swift - uso di opzionale con let
- 23. Come scartare i doppi optionals?
- 24. campo opzionale vs array vuoto a Swift
- 25. Parametro opzionale predefinito nella funzione Swift
- 26. Perché utilizzare "this.props.dispatch" piuttosto che "store.dispatch" direttamente in Redux?
- 27. Il deinit di Swift non viene chiamato
- 28. Perché 'last' è chiamato 'last' in Perl?
- 29. Xcode Forzare Swift opzionale scarta due volte (!!)
- 30. Perché RAII è così chiamato?
http://en.wikipedia.org/wiki/Explicit_and_implicit_methods – XaxD
implicito e esplicito hanno a che fare con il loro uso, non con le loro dichiarazioni. Vai avanti e prova a non scartare un 'Opzionale' e usarlo come un semplice 'T' e tornare da me. –
CodaFi
Ottima domanda. Ho pensato allo stesso modo. Preferirei chiedere agli sviluppatori Apple :) – SoftDesigner