2015-06-03 4 views
8

Ich habe Swift Programmierung seit ein paar Monaten gemacht und ich war schon immer neugierig auf diese ...Vorteil des Swift Compilers den Typ eines Objekts zu sagen, anstatt zu folgern?

Gibt es einen Vorteil zu sagen, der Swift Compiler der Typ eines Objekts in seiner Deklaration? I.e. let image: UIImage = UIImage()

Verglichen damit, den Compiler NICHT zu sagen und ihn zur Laufzeit abzuleiten. Ie.e let image = UIImage()

Ich würde denken, es wäre effizienter, den Compiler den Objekttyp zu sagen, anstatt es den Typ abzuleiten. Ich weiß, dass diese Frage auch für die Objective-C-Syntax spricht, also füge ich das in die Tags ein.

Antwort

10

Es gibt keinen Laufzeitunterschied zwischen den beiden. Während der Kompilierung leitet Swift den Typ ab und schreibt ihn für Sie ein. Aber einmal kompiliert, sind die beiden Aussagen identisch.

Es ist eine Frage der Lesbarkeit und gelegentlich Compiler-Effizienz.

Lesbarkeit, weil in der Aussage let image: UIImage = UIImage(), das doppelte Auftreten von UIImage ist nur Unordnung. Und in Fällen von komplexeren Typen ist es ziemlich wichtig - niemand möchte let keys: LazyForwardCollection<MapCollectionView<Dictionary<String, Int>, String>> = dict.keys schreiben, wenn sie let keys = dict.keys schreiben können.

Compiler Effizienz, weil gelegentlich werden Sie feststellen, dass ein besonders zweideutig Typ (Literale Literale hierfür ist berüchtigt), wo viele Überlastungen müssen gelöst werden, um ein viel kompilieren kann schneller, wenn Sie explizit den Typen auf der linken Seite nennen -handseite. Aber das ist nur eine Frage, wie schnell es kompiliert, nicht wie schnell es läuft, sobald es kompiliert wurde.

2

Von Swift Documentation:

Es ist selten, dass man Typenannotationen in der Praxis schreiben müssen. Wenn Sie einen Anfangswert für eine konstante oder variable an der Stelle vor, dass es definiert ist, kann Swift fast immer den Typ ableiten, für die konstante oder variable verwendet werden, wie beschrieben in Type Safety and Type Inference

So ist es nicht wichtig, wenn Sie den Instanztyp deklarieren oder nicht.