Der Name der !
verwirrt mich immer: Es wird als "implizit unwrapped optional" bezeichnet. Was beinhaltet das jedoch? Implizit bedeutet "angedeutet, aber nicht klar ausgedrückt". Allerdings fügt nicht eine !
deutlich seinen Zweck ausdrücken? Fügen Sie keine !
hinzu, machen Sie explizit, was wir erreichen wollen?Warum ist das! in Swift nannte ein "implizit" statt "explizit" ausgepackt optional?
Antwort
Normale Optional
var foo : Foo? = Foo()
foo!.doSomething() // explicitly unwrap it and call the method
Implizit Unwrapped Optional
var foo : Foo! = Foo()
foo.doSomething() // implicitly unwrap it and call the method just like it is not optional
In beiden Fällen müssen Sie etwas ein optionales (?
oder !
) zu erklären. Implizit Unwrapped Optional fügt nicht mehr hinzu. Sie können jedoch den Unwrap-Operator weglassen, wenn Sie ihn verwenden.
In Swift werden nachgestellte Ausrufezeichen (!
) auf zwei verschiedene Arten verwendet. Einer heißt Forced Unwrapping. Dies ist, wenn Sie eine Variable definiert als Optional und Sie wollen im Grunde behaupten, dass der Wert nicht gleich Null, so dass Sie es verwenden können, als ob es keine optional waren:
var optionalName: String? = "World"
if optionalName != nil {
sayHelloTo(optionalString!)
}
Eine alternative Art und Weisen Sie beschreiben könnten "Forced Unwrapping" ist "Explicit Unwrapping", aber forced fügt den zusätzlichen Hinweis hinzu, dass das gesamte Programm abstürzt, wenn Sie versuchen, ein optionales "Nil" -Einpacken "erzwingen".
Die zweite ist, wenn Sie tatsächlich den Typ einer Variablen deklarieren und es heißt . Dies ist der Fall, wenn Sie eine Variable deklarieren möchten, die technisch optional ist, die Sie jedoch so behandeln, als wäre sie nicht optional. Jedes Mal, wenn Sie diese Implizit verwenden Unwrapped Optional ist es in der Realität, die „Kraft Auswickeln“ tun ich oben beschrieben:
var name: String! = "World"
if name != nil {
sayHelloTo(name)
}
Sie können immer noch eine Implizit Unwrapped Optional für null testen, aber man kann es auch direkt verwenden, wie wenn es nicht optional wäre. Deshalb gilt es als implizit. Jedes Mal, wenn Sie es verwenden, ist es automatisch implizit für Sie ausgepackt.
Like „Forced Auswickeln“ eine „Implizit Unwrapped Optional“ wird immer noch das gesamte Programm abstürzen, wenn Sie versuchen, es zu verwenden, wenn es null
- 1. Was ist der Unterschied zwischen optional und implizit unwrapped optional?
- 2. Warum ist das Überschreiben in C++ optional?
- 3. Warum wickelt der Koaleszenzoperator nil einen implizit unverpackten Standardwert ein?
- 4. Swift 2.2: Optional Bindung in einer Funktion
- 5. Swift 2.2 Optional Typ Selbstkorrektur
- 6. Explizit und implizit für operator (int)
- 7. Warum explizit "privat" schreiben?
- 8. C++ 11: Standardkonstruktor: Implizit oder Explizit?
- 9. Warum gibt Swift null-coalescing ein Optional zurück?
- 10. Warum ist eine generische Funktion explizit nicht erlaubt?
- 11. Wird TransactionScope implizit angewendet, bis explizit Completed?
- 12. Warum ist das "neue" Schlüsselwort in Swift nicht notwendig?
- 13. String noch optional in Swift
- 14. RestKit RKObjectMapping Swift Optional
- 15. Warum ist @override Annotation optional?
- 16. Optional dynamische Eigenschaften in Swift
- 17. Swift String Interpolation Anzeige optional?
- 18. Warum ist das Hauptfenster vom Typ double optional?
- 19. Swift optional Ausgabe
- 20. Optional Parameter Vorgabe in Swift
- 21. Wert des optionalen Typs 'UIImage?' nicht ausgepackt
- 22. Ist das Schlüsselwort 'event' in C# optional?
- 23. Implizit lazy statische Mitglieder in Swift
- 24. Einen Standardwert für ein Optional in Swift bereitstellen?
- 25. Optional Verkettungs mit Swift Saiten
- 26. optional lassen und optional var innerhalb einer Klasse in swift
- 27. Ist ein Stern in einem Funktionszeiger optional?
- 28. Qt implizit freigegebener Container von explizit freigegebenen Artikel
- 29. Wie entpacke ich ein Optional, wenn Mustervergleichstupel in Swift?
- 30. Warum ist die Rückgabe 0 optional?
http://en.wikipedia.org/wiki/Explicit_and_implicit_methods ist – XaxD
Implizite und explizit mit ihrer Verwendung zu tun haben, nicht mit ihren Erklärungen. Sie gehen voran und versuchen, ein 'Optional' nicht auszupacken und verwenden es wie ein einfaches' T' und kommen zu mir zurück. –
CodaFi
Große Frage. Ich habe darüber nachgedacht. Ich habe eher Apple-Entwickler gefragt :) – SoftDesigner