Як імпортувати власні класи з власного проекту на дитячий майданчик


77

Припустимо таке налаштування:

  • У вас є проект Xcode 6, де ви реалізували власні класи (скажімо MyView та MyViewController) як з Objective-C, так і Swift
  • Ви додали дитячий майданчик у свій проект

У Playground можна імпортувати модулі (фреймворки), як UIKitза importключовим словом. Як ви надаєте доступ до інших класів проекту з дитячого майданчика?

Просто спроба отримати доступ до класів проектів безпосередньо призводить до повідомлення про помилку: Використання невирішеного ідентифікатора "MyView"


1
Бажаю, щоб була актуальна відповідь на це питання (7.3+)
Тревіс Гріггс,

будь ласка , перевірте: stackoverflow.com/questions/28301662 / ...
Freesoul

будь ласка , перевірте це питання і відповідь: stackoverflow.com/questions/28301662 / ...
Freesoul

Відповіді:


57

Починаючи з Xcode 6.0 Beta 5, тепер можна імпортувати власні фреймворки на дитячий майданчик. Це забезпечує спосіб обміну кодом між вашими програмами та ігровими майданчиками, які можуть імпортувати ваші фреймворки. Зробити це:

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

  2. Ви, мабуть, уже створили свій фреймворк. Якщо це фреймворк iOS, він повинен бути побудований для 64-розрядного пункту призначення (наприклад, iPhone 5s) і повинен бути побудований для симулятора.

  3. Ви повинні мати активну схему, яка будує принаймні одну ціль (місце збірки цілі буде використано у шляху пошуку фреймворку для дитячого майданчика).

  4. Ваші налаштування "Розташування місця" (у розширених налаштуваннях "Місцеположення" Xcode) не повинні мати значення "Спадщина".

  5. Якщо ваш фреймворк не є фреймворком Swift, параметр збірки "Визначає модуль" повинен бути встановлений на "Так".

  6. Ви повинні додати заявку на імпорт на свій дитячий майданчик для фреймворку.

Як тільки всі ці умови будуть виконані, імпорт вашого фреймворку працюватиме на дитячому майданчику.

У Xcode 7 ми ввели інший механізм, за допомогою якого ви можете імпортувати власні класи як джерело, замість того, щоб імпортувати фреймворк; Ви можете прочитати про цю підтримку "Допоміжних джерел" за адресою http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af


"Ігрові майданчики підтримують імпорт фреймворків." XCode 6 beta 5 Журнал змін
Альберт Борі,

109
До складних. Apple повинна зробити це простіше.
Раміс

6
Отже, неможливо імпортувати класи з цільової програми, чи не так?
bilby91

5
Здається, це не працює в Xcode 6.1. Я дотримувався вимог Балларда, наведених вище, які наведені тут як навчальний посібник , і оператор імпорту на дитячому майданчику викликає помилку.
ybakos

4
Тільки примітка: Ви повинні створити двійковий файл Simulator . Створення двійкового файлу пристрою не впливає. (Версія Xcode 6.3.2 (6D2105))
eonil

18

Насправді мені вдалося звернутися до інших файлів Swift у поточному проекті, зробивши це:

  • Створіть порожній дитячий майданчик, і місце буде десь під вашим проектом.
  • Відкрийте YourPlayground.playgroundпакет (так, це пакет = каталог) у Терміналі.
  • contents.xcplaygroundНаприклад, відредагуйте viта додайте ще один розділ, подібний до цього:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<playground version='3.0' sdk='iphonesimulator'> 
   <sections>
       <code source-file-name='section-1.swift'/>
       <code source-file-name='section-2.swift'/>
   </sections>
   <timeline fileName='timeline.xctimeline'/>
</playground>
  • Перейменуйте section-1.swiftна section-2.swift(якщо ви створили дитячий майданчик з нуля, section-1.swiftу вашому наборі повинен бути приклад )
  • Додайте жорстке посилання (символічне посилання, схоже, не працює) з назвою, section-1.swiftяке буде вказувати поза пакетом до вашого файлу класу Swift, наприклад:
ln ../../Classes/MyView.swift section-1.swift
  • Закрийте Xcode і знову відкрийте майданчик.
  • Тепер має бути два розділи, один із вмістом вашого файлу класу Swift, а другий із прикладом вмісту, який ви отримали при створенні Playground з нуля.

Таким чином, я дійсно можу запускати код, що лежить поза майданчиком, але Xcode, здається, частіше аварійно працює, коли робить це так.

Редагувати:

Починаючи з Xcode 6 beta 5, ви тепер можете посилатися на файли проекту, як вказує Рік Баллард відповіді .


1
Зверніть увагу, що це призведе до того, що один і той самий файл з’явиться та редагується у двох місцях. Якщо додати style='setup'до <code>тегу, він виглядатиме як згорнутий / розширюваний блок, що може бути більш ідеальним, оскільки він певною мірою приховує додатковий файл.
Крістофер Сузі

12

Оскільки Beta 5 з Xcode 6 можна імпортувати ваш код, якщо він знаходиться у фреймворці. Що вам потрібно зробити, це створити фреймворк-мішень, додати туди файли Swift і зробити на своєму ігровому майданчику

import ModuleName

Ви можете знайти назву модуля в налаштуваннях збірки. Зазвичай це те саме, що і назва цілі.

Не забудьте ввести код, який ви хочете побачити public. Вам потрібно буде побудувати проект, перш ніж зміни будуть доступні на дитячому майданчику. (Вам також потрібно буде відредагувати ігровий майданчик, щоб викликати повторне виконання.)

Важливо

Не давайте файлу дитячого майданчика те саме ім'я, що і цілі! Якщо ви це зробите, імпорт, здається, працює, але при спробі виконати ігровий майданчик ви отримаєте таку помилку:

Помилка виконання дитячого майданчика: помилка: Не вдалося знайти символи:

Я витратив годину на те, щоб це зрозуміти. :)


Підказка щодо іменування була моєю проблемою. Дуже дякую!
mxcl

2
Порада: Не потрібно оголошувати символи як public. Просто позначте імпорт як@testable import ModuleName
Джон Естропія

10

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

Просто створіть ігровий майданчик у своєму проекті, у ньому є каталог, який називається «джерела», просто перетягніть копію швидкого класу в цю папку, і ігровий майданчик матиме доступ до нього.

Наприклад:

введіть тут опис зображення


4
Це спрацювало для мене. Іншим людям не забудьте також запевнити, що ви заявляєте речі, publicякі ви хочете використовувати на дитячому майданчику. developer.apple.com/library/ios/documentation/Swift/Conceptual/… - Я ще не знайшов ресурсу Swift, який заповнює розрив між вивченням Swift (просто) та фактичною організацією проекту Swift у XCode (поки що дуже неінтуїтивний) .
danneu

4

Я просто помістив посилання на всі свої швидкі файли в Sourcesпапці:

cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.swift .

Таким чином зміни у вихідному файлі негайно наберуть чинності на вашому дитячому майданчику. Працювали дуже гарно .

Xcode 8.2, Swift 3.0.1, macOS Sierra


повертає 'Немає такого файлу каталогу'. Чи можете ви допомогти, будь ласка
ZaEeM ZaFaR

-1

Все, що вам потрібно зробити - це написати на початку:

import ModuleName

(припускаючи, що ваш дитячий майданчик розміщений у тій самій робочій області, що і фреймворк / проект)

Якщо це не працює:

  1. Відновіть свій проект

  2. Відтворіть дитячий майданчик і скопіюйте все зі старого дитячого майданчика

Це вирішує багато дивних помилок із невдалими ініціалізаціями та імпортом будь-чого!

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