Swifts Standardbibliothek und Namenskollision

8

Ich weiß, dass Swift keine Namespaces verwendet, aber diese Namen sind in jedem Modul definiert. Vor allem verstehe ich nicht sehr gut, wie dies Namenskollisionen vermeidet - fühlen sich frei zu erarbeiten.

Trotzdem lautet meine Hauptfrage: Nehmen wir an, ich möchte eine Baumstruktur, ohne NSTreeNode zu verwenden, also mache ich meine eigene Klasse namens "TreeNode". Nehmen wir nun an, dass Apple beschließt, eine Klasse zum Erstellen von Bäumen in Swifts Standardbibliothek aufzunehmen, und wie erwartet, nennen sie es "TreeNode". Was passiert dann? Mein benutzerdefinierter TreeNode kollidiert mit dem TreeNode der Standard Library ... Muss ich meinen Code in solchen Fällen ändern? Oder wird Apple versprechen, dass Swifts Standardbibliothek sich in Zukunft nicht ändert?

EDIT: Frage beantwortet hier (danke @Martin R für Ihren Kommentar)

    
George 10.08.2014, 18:18
quelle

1 Antwort

16

Der Namensraum in Swift ist implizit. Alle Klassen und anderen Symbole gehören zu dem Ziel (Modul), in dem sie definiert sind. Wenn Sie also eine Klasse String definieren, wäre der vollständig qualifizierte Name MyTarget.String . Wenn es eine Namenskollision gibt, müssen Sie dem Klassennamen das Modul (Framework) voranstellen, in dem es definiert ist, außer wenn eine Klasse mit diesem Namen im aktuellen Modul definiert ist - diese Klasse hat Vorrang und muss nicht sein Präfix.

%Vor%

Wenn Sie also Ihre Klasse TreeNode erstellen und Apple später auch TreeNode hinzufügt, hat Ihr Name Vorrang, wenn Sie nur ein Modul verwenden und Sie nichts ändern müssen. Wenn Sie Swift TreeNode verwenden möchten, müssen Sie es als Swift.TreeNode bezeichnen.

    
Marián Černý 10.08.2014 19:17
quelle