2016-12-24 4 views
0

Я читаю IOS Мэтты pragraming книги, когда я прочитал здесь:В нашем файле Swift, где я могу импортировать быстрый модуль?

Swift сам определяются в модуле - Свифт модуль. Ваш код всегда неявно импортирует модуль Swift. Вы можете сделать это явным, запустив файл с линией импорта Swift; нет необходимости делать это, но это тоже не повредит.

Этот факт важен, поскольку он решает главную тайну: откуда берутся такие вещи, как печать, и почему можно использовать их вне любого сообщения для какого-либо объекта? print - фактически функция, объявленная на верхнем уровне модуля Swift, и ваш код может видеть декларации верхнего уровня модуля Swift, поскольку он импортирует Swift. Таким образом, функция печати становится, насколько ваш код, обычной функцией верхнего уровня, как и любая другая; он глобальный для вашего кода, и ваш код может говорить об этом без указания его пространства имен. Вы можете указать его пространство имен - вполне законно говорить такие вещи, как Swift.print («привет»), но вы, вероятно, никогда этого не сделаете, потому что конфликт имен не разрешается.

Такие, как, в моем тесте 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 ? 

    } 
} 

Мы можем использовать print или Swift.print, я просто хочу спросить, как яблоко неявно импортирует Swift модуль? и очевидно, UIKit, мы должны импортировать, если может имплицитно импортировать модуль Swift, почему там яблоко не подразумевает импорт UIKit?

Мое недоразумение заключается в том, как неявно импортирует модуль Swift?

+1

Ваша цитата объясняет, что именно вы спрашиваете – Alexander

+0

@ Александр, я обновляю вопрос, прежде чем у меня недостает ясности. – aircraft

ответ

0

Неявный импорт модуля Swift - это поведение, жестко закодированное в компиляторе Swift, исключительно для модуля Swift.

+0

Если это правда, моя путаница решается, и как это доказать? есть ли «doc» или официальное заявление? – aircraft

+0

Не то, чтобы я знал. Вы можете обследовать [исходный код компилятора] (https://github.com/apple/swift) для подтверждения, если вас это устраивает. В любом случае, это шаг, который происходит автоматически во время компиляции, детали которого не имеют большого значения. Это не механизм, который вы можете использовать для неявного импорта модулей, если это то, что вы хотите сделать. – Alexander

+0

«Clang» может определить быструю грамматику языка, если это правильно, поэтому, когда мы создаем файл 'swift', если он находится под детектором Clang, я буду искать доказательства, а затем отвечать. – aircraft

0

Обратитесь к Alexandex х, я finnaly найти doc

И мы можем видеть Clang importer:

лязг импортер (реализованный в Lib/ClangImporter) импортирует модули лязгом и отображает C или Objective-C API, которые они экспортируют в соответствующие API Swift. В результате импортированных АСТ можно называть семантическим анализом.

+0

Здесь нет ничего, чтобы предположить, что так импортируется модуль Swift – Alexander

Смежные вопросы