Vorteil, dem Swift-Compiler den Typ eines Objekts mitzuteilen, anstatt zu folgern?

8

Ich mache jetzt Swift-Programmierung für ein paar Monate und ich war schon immer neugierig darauf ...

Gibt es einen Vorteil, dem Swift-Compiler den Typ eines Objekts in seiner Deklaration mitzuteilen? I.e. let image: UIImage = UIImage()

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

Ich würde denken, es wäre effizienter, dem Compiler den Objekttyp mitzuteilen, anstatt ihn auf den Typ schließen zu lassen. Ich weiß, dass diese Frage auch an die Objective-C-Syntax appelliert, also füge ich das in die Tags ein.

    
justColbs 03.06.2015, 15:34
quelle

2 Antworten

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 nur eine Frage der Lesbarkeit und gelegentlich der Compiler-Effizienz.

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

Effizienz des Compilers, weil Sie gelegentlich feststellen, dass ein besonders ambiger Typ (Literale von Literalen sind dafür berüchtigt), wo viele Überladungen aufgelöst werden müssen, ein Los schneller kompilieren können, wenn Sie den Namen explizit benennen Tippen Sie auf der linken Seite. Aber das ist nur eine Frage, wie schnell es kompiliert, nicht wie schnell es läuft, sobald es kompiliert hat.

    
Airspeed Velocity 03.06.2015, 15:44
quelle
2

Aus Swift-Dokumentation :

  

Es ist selten, dass Sie in der Praxis Typanmerkungen schreiben müssen. Wenn Sie einen Anfangswert für eine Konstante oder Variable an dem Punkt angeben, an dem sie definiert ist, kann Swift fast immer den Typ für diese Konstante oder Variable ableiten, wie in Geben Sie Sicherheit und Typ Inferenz ein

Es spielt also keine Rolle, ob Sie den Instanztyp deklarieren oder nicht.

    
Dharmesh Kheni 03.06.2015 15:46
quelle

Tags und Links