2016-12-24 4 views
0

Ich lese iOS pragraming Buch matt, wenn ich hier gelesen:In welcher Swift-Datei importiere ich das Swift-Modul?

Swift selbst in einem Modul definiert ist - das Swift-Modul. Ihr Code importiert das Swift-Modul immer implizit. Sie können dies explizit machen, indem Sie eine Datei mit dem Zeilenimport Swift starten; das ist nicht nötig, aber auch nicht schädlich.

Diese Tatsache ist wichtig, weil sie ein großes Rätsel löst: Woher kommen Dinge wie Drucken, und warum ist es möglich, sie außerhalb jeder Nachricht an irgendein Objekt zu verwenden? print ist in der Tat eine Funktion, die auf der obersten Ebene des Swift-Moduls deklariert ist, und Ihr Code kann die Top-Level-Deklarationen des Swift-Moduls sehen, da er Swift importiert. Die Druckfunktion wird somit, was Ihren Code betrifft, eine gewöhnliche Top-Level-Funktion wie jede andere; Es ist global für Ihren Code und Ihr Code kann davon sprechen, ohne seinen Namespace anzugeben. Sie können seinen Namespace angeben - es ist vollkommen legal, Dinge wie Swift.print ("Hallo") zu sagen - aber Sie werden es wahrscheinlich nie tun, weil es keinen Namenskonflikt zu lösen gibt.

Wie in meinem Test ViewController:

import UIKit 
//import Swift // here we can import Swift. it is okay 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     Swift.print("hello, matt") // where we import the Swift ? 

    } 
} 

Wir verwenden print oder Swift.print, ich möchte nur fragen, wie Apfel implizit das Swift-Modul importiert? und offensichtlich, UIKit, müssen wir importieren, wenn implizit importiert Swift Modul, warum Apple importiert nicht implizit UIKit?

Meine Verwirrung ist, wie importiert implizit das Modul Swift?

+1

Ihr Zitat erklärt genau, was Sie zu fragen scheinen – Alexander

+0

@Alexander, aktualisiere ich die Frage, bevor ist mein Mangel an Klarheit. – aircraft

Antwort

0

Der implizite Import des Moduls Swift ist ein Verhalten, das im Swift-Compiler ausschließlich für das -Modul kodiert ist.

+0

Wenn es wahr ist, ist meine Verwirrung gelöst, und wie kann dies beweisen? Gibt es eine "doc" oder offizielle Aussage? – aircraft

+0

Nicht, dass ich weiß. Sie können den [Compiler-Quellcode] (https://github.com/apple/swift) durchsuchen, um Beweise zu erhalten, wenn Sie genug dafür tun. In jedem Fall ist dies ein Schritt, der automatisch während der Kompilierung passiert, dessen Details nicht wirklich wichtig sind. Es ist kein Mechanismus, den Sie verwenden können, um Module implizit zu importieren, wenn Sie das möchten. – Alexander

+0

Das 'Clang' kann die schnelle Sprachgrammatik erkennen, wenn es richtig ist. Wenn wir die 'swift'-Datei erstellen, wenn sie unterhalb des' Clang's liegt, suche ich nach dem Beweis und antworte dann. – aircraft

0

zu Alexandex des Siehe, ich habe die finnaly doc finden

Und wir können Clang importer sehen: importiert Clang Module und bildet die C oder Objective-C

Der Clang Importeur (in lib/ClangImporter implementiert) APIs exportieren sie in ihre entsprechenden Swift-APIs. Auf die resultierenden importierten ASTs kann durch semantische Analyse Bezug genommen werden.

+0

Es gibt hier keinen Hinweis darauf, dass das Swift-Modul so importiert wird – Alexander