Як створити імпортований модуль у Swift?


75

Я прочитав документацію Apple для Swift і не можу знайти нічого про те, як створювати модулі або як визначати членів класу чи структури як приватних чи загальнодоступних.

У синтаксисі є посилання на оператор імпорту, але я не можу знайти жодної інформації про те, що він робить, і як ним користуватися.

Хтось знає, де я можу це знайти?


11
Не по темі? Серйозно? В даний час немає відомих ресурсів для швидких, допоміжних модулів. Інші вважають інформацію надзвичайно цінною. Це не суб’єктивно, бо ще нічого не існує!
Бретт Райан,

Нещодавно я знайшов, як імпортувати модулі (C, C ++) у Swift за допомогою Swift Compiler - Search Paths (Xcode 6 Build Settings). Сподіваюся, це допоможе.
vladof81

Відповіді:


-1

Оновлення

Ви можете модулювати швидкий проект за допомогою фреймворків.

Ми модулюємо, створюючи окремі фреймворкові проекти для кожного модуля та пов'язуючи їх через робочу область Xcode. Це виглядає більш природно, коли ми розділяємо компоненти на різні проекти, і це також гарантує, що між модулями існує лише односторонній зв'язок. Розробники можуть працювати / тестувати на ізоляцію, не задумуючись над іншими модулями.

За замовчуванням класи / структури / і т. Д., Створені в рамках, матимуть internalтип контролю доступу, тому його можна буде побачити лише в модулях. Для того, щоб зробити його видимим поза модулем, ви можете зробити це public.

Більше інформації про рівень контролю доступу тут


Останнє оновлення бета-версії Xcode 6 (бета-версія 4) забезпечує швидкий контроль доступу

Swift Увімкнення контролю доступу

Швидкий контроль доступу має три рівні доступу:

  • приватні сутності можуть бути доступні лише з вихідного файлу там, де вони визначені.
  • внутрішні сутності можуть бути доступні в будь-якому місці цілі, де вони визначені.!
  • доступ до публічних об’єктів можна отримати з будь-якого місця цілі та з будь-якого іншого контексту, що імпортує модуль поточної цілі.

32
Як ця відповідь допомагає комусь створити імпортований модуль у Swift?
Ендрю Пол Сіммонс,

Фреймворкінг проекту зменшить продуктивність запуску. Кожному фреймворку потрібен час для завантаження.
Келін

Так, динамічне зв’язування уповільнить запуск програми. Apple пропонує поріг 6 динамічних фреймворків. Але в Xcode 9 ви можете змінити посилання на статичну бібліотеку типу Mach-O, щоб вирішити проблему запуску. Для отримання додаткової інформації developer.apple.com/videos/play/wwdc2016/406
Клемент Прем

25

У Swift, "Модулі" відноситься до фреймворків. Xcode тепер має шаблон для створення фреймворкового проекту як для iOS, так і для OS X.

В даний час не існує можливості оголосити методи або властивості загальнодоступними / захищеними. Якщо ви хочете бачити, що це додано як функцію, ви можете надіслати запит на функцію у звіті про помилки Apple . Слід також зазначити, що Apple заявила, що мова може змінюватися з кожним випуском Xcode, тому цілком можливо, що рівні доступу учасників можуть бути додані до публічного випуску.


1
Дякую за цю відповідь. З основного виступу я зрозумів, що однією з основних проблем ObjC, до якої звертався Свіфт, була можливість модулювати код за допомогою просторів імен. Я впевнений, що вони мають намір посилатися на щось інше, ніж створення фреймворків для кожного модуля - це було б багато накладних витрат і не підтримувало б ієрархію модулів. Чесно кажучи, це відчуває, ніби його вивезли на ринок незавершеним. Я впевнений, що ряд цих функцій буде додано швидко, і, мабуть, варто нам, розробникам, зачекати пару випусків, перш ніж використовувати їх.
спринтер

1
Так, я запитував про те саме, і інженер сказав, що це одна з найбільш затребуваних функцій. Тож це точно на їхньому радарі
Остін,

Зараз ви можете це зробити, створивши клас із класами-членами. Я знаю, що це не одне і те ж, але воно працює приблизно однаково.
o.uinn

8

Крім того, є спосіб зробити модуль самостійно, але це трохи складніший спосіб.

Якщо ви подивитесь, xcrun swift -helpви можете побачити кілька варіантів, і вони є -emit-module, -emit-libraryі -emit-objectякі можуть бути корисними, але, мабуть, вам слід віддати перевагу офіційному способу і поширювати модулі через Frameworks.

Якщо ви все-таки хочете зробити модуль самостійно, ви можете прочитати цей посібник із деякими поясненнями


Приємна інформація. Це також може посилатися без Xcode або REPL. Хоча це дивно, що не може swiftmoduleвикористовувати --sdk iphoneos.
vladof81

Ви можете використовувати SWM (Swift Modules) для створення імпортних.swiftmodule двійкових файлів - github.com/jankuca/swm
JK

-2

Apple зазначила, що приватні методи ще не існують, але вони знаходяться в процесі впровадження. Пам’ятайте, що це мова для новонароджених, і вона все ще формується.


1
Це питання не задає питання про приватний доступ.
Кевін,

-4

Свіфт 4.0

Опис із розділу "Контроль доступу" в книзі Apple " Мова програмування Swift (видання Swift 4) "

Swift надає п’ять різних рівнів доступу для сутностей у коді. Ці рівні доступу відносно вихідного файлу, в якому визначено сутність, а також відносно модуля, до якого належить вихідний файл.

  • openдоступ і publicдоступ дозволяють використовувати сутності в будь-якому вихідному файлі з їх визначального модуля, а також у вихідному файлі з іншого модуля, який імпортує визначальний модуль. Зазвичай ви використовуєте відкритий або відкритий доступ, коли вказуєте загальнодоступний інтерфейс до фреймворку. Різниця між відкритим та іншим модулем, який імпортує визначальний модуль. Зазвичай ви використовуєте відкритий або відкритий доступ, коли вказуєте загальнодоступний інтерфейс до фреймворку.
  • internalaccess дозволяє використовувати сутності в будь-якому вихідному файлі з їх визначального модуля, але не в будь-якому вихідному файлі за межами цього модуля. Зазвичай ви використовуєте внутрішній доступ при визначенні внутрішньої структури програми або фреймворку.
  • fileprivateдоступ обмежує використання сутності власним визначальним вихідним файлом. Використовуйте приватний доступ до файлу, щоб приховати деталі реалізації певної функції, коли ці деталі використовуються у цілому файлі.
  • privateдоступ обмежує використання сутності для вкладеної декларації та розширень цієї декларації, що знаходяться в одному файлі. Використовуйте приватний доступ, щоб приховати деталі реалізації певної функції, коли ці деталі використовуються лише в межах однієї декларації. "

Інформація у цій відповіді вже зазначена у прийнятій відповіді (див. Посилання там)
ReinstateMonica3167040
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.