2016-06-29 6 views
0

Ich bin CS Student relativ neu in Cocoa/CocoaTouch und ich versuche die Natur von OS X/iOS Dev zu verstehen. Ich verstehe den Unterschied zwischen dynamischen und statischen Sprachen.Welchen Effekt hat Swifts Mangel an dynamischen Fähigkeiten bei der Entwicklung?

Statische Sprachen haben alle auf eine Art gebunden Variablen usw. Variablen während der Ausführung gebunden sind für dynamische usw.

Allerdings, wenn ich OS X-Anwendungen entwickle ich kämpfen, um die Beispiele, in denen dynamische Funktionalität sehen würde die Dinge ändern? Kann jemand erklären was jemand erklärt was Obj-C unterstützen kann das Swift grundsätzlich nicht bei der Entwicklung von Apps kann? Ich bin auf viele Fälle gestoßen, in denen der Mangel an Flexibilität mich gezwungen hat, meinen Code zu überarbeiten, aber davon rede ich nicht, oder bin ich verwirrt?

+0

http://programmers.stackexchange.com/questions/122205/what-is-the-supposed-productivity-gain-of-dynamic-typing hat einige gute Antworten auf diese aus einer Programmiererperspektive –

+0

Der grellste Unterschied zwischen ObjC und Swift: Reflektion. Die ObjC Runtime-Funktionen bieten viel reichere Introspektionsfunktionen als Swifts "Mirror" –

+0

Nur ein Beispiel. Sie können die Klasse eines Obj-C-Objekts in eine Unterklasse ändern, indem Sie einfach einen Wert festlegen. Sie können die vorhandene Methode zur Laufzeit durch eine andere Methode ersetzen (Methode swizzling). Sie können ein Objekt ohne Methoden verwenden, die abhängig vom Methodennamen, den Sie aufrufen möchten, dynamisch Funktionen generieren.Sie können eine Klasse verwenden, die sich von der Methode unterscheidet, die eine Methode erwartet, vorausgesetzt, sie haben beide dieselbe Methode ... und die Liste wird fortgesetzt. – Sulthan

Antwort

3

Kann jemand erklären, was jemand erklären, was Obj-C kann nicht grundsätzlich, dass Swift unterstützen können, wenn Anwendungen

Entwicklung Was ich ausnutzen von in Objective-C nicht so Eingabe viel Dynamik wurde verwendet, um als dynamisch messaging. Das gesamte Messaging-Gerät kann zur Laufzeit rejiggered werden, von der einfachen Schlüsselwertcodierung oder performSelector bis zur dynamischen Injektion von Methoden in eine Klasse zur Laufzeit, Methodenwechsel und Schlüsselwertbeobachtung.

Sie können tun all diese Dinge in Swift, aber nur vorausgesetzt, Sie sprechen mit Objective-C (d. H. Das ist ein NSObject). Das ist, weil all diese Dinge tatsächlich in Objective-C getan werden. Du kannst zum Beispiel nicht einmal die einfachste Schlüssel-Wert-Kodierung in reinem Swift implementieren, in Abwesenheit von Foundation, da Swift weder dynamische Nachrichten noch echte Introspektion hat.

Aus der Sicht der praktischen App-Programmierung verpasse ich nichts davon. Für eine Sache, ich bin immer im Gespräch mit Objective-C, weil Cocoa in Objective-C ist. Zum anderen stellt sich heraus, dass die meisten dieser Tricks nicht wirklich notwendig waren, und ich habe meist andere Wege gefunden, um meine praktischen Ziele zu erreichen. Ich benutze immer noch eine Schlüsselwertkodierung (besonders um Tricks wie einen beliebigen Wert in einem CALayer zu speichern), aber im Großen und Ganzen habe ich meinen Gebrauch von solchen Sachen zurückgeschnitten, hauptsächlich dank der Tatsache, dass Funktionen zuerst sind Bürger in Swift.

Wie für dynamische Eingabe, ich vermisse es nicht für einen Augenblick; Wechsel zu Swift hat tatsächlich gespeichert mich aus Fehlern, die ich machte, ohne es zu merken, weil dynamische Typisierung auf mich durch die APIs auferlegt (zB die Tatsache, dass objectAtIndex: eine id zurückgegeben - obwohl, um sicher zu sein, dies ist weniger wahrscheinlich stört Sie heute dank "leichter Generika").

+0

danke für die Antwort. Was meinst du mit "hauptsächlich dank der Tatsache, dass Funktionen erstklassige Bürger in Swift sind" –

+0

Ich meine, Sie müssen Methodenaufrufe nicht dynamisch bilden, weil Methodenaufrufe wie Objekte sind - Sie können Arrays von ihnen machen, sie übergeben herum, usw. – matt

Verwandte Themen