Как импортировать собственные классы из собственного проекта в игровую площадку
Предположим, что такая настройка:
- У вас есть проект Xcode 6, в котором вы реализовали свои собственные классы (например, MyView и MyViewController) с помощью Objective-C и Swift
- В свой проект добавлена игровая площадка.
На игровой площадке можно импортировать модули (фреймворки) типа UIKit
с ключевым словом import
. Как вы разрешаете доступ к проекту других классов из игровой площадки?
Просто попытка получить доступ к классам проекта напрямую приводит к сообщению об ошибке:
Использование неразрешенного идентификатора "MyView"
Ответы
Ответ 1
Начиная с версии Xcode 6.0 Beta 5, теперь можно импортировать собственные фреймворки в игровые площадки. Это обеспечивает возможность совместного использования кода между вашими приложениями и игровыми площадками, которые могут импортировать ваши фреймворки. Для этого:
-
Ваша игровая площадка должна находиться в том же рабочем пространстве, что и проект, создающий вашу структуру. Ваша рабочая область должна содержать цель, которая создает фреймворк, вместо использования встроенной структуры.
-
Вы уже создали свой фреймворк. Если это инфраструктура iOS, она должна быть построена для назначения 64-разрядного запуска (например, iPhone 5s) и должна быть построена для симулятора.
-
У вас должна быть активная схема, которая строит хотя бы одну цель (это целевое местоположение сборки будет использоваться в пути поиска фрейма для игровой площадки).
-
Предпочтение "Построение местоположения" (в расширенных настройках "Местоположения" Xcode) не должно быть установлено в "Наследие".
-
Если ваша инфраструктура не является средой Swift, параметр сборки "Определить модуль" должен быть установлен на "Да".
-
Вы должны добавить оператор импорта на свою площадку для фреймворка.
Как только все эти условия будут выполнены, импорт вашей инфраструктуры будет работать на игровой площадке.
В Xcode 7 мы представили еще один механизм, который вы можете использовать для импорта собственных классов в качестве источника, а не для импорта фреймворка; вы можете прочитать об этой поддержке "Вспомогательные источники" на http://help.apple.com/xcode/mac/8.0/#/devfa5bea3af
Ответ 2
Мне действительно удалось обратиться к другим файлам Swift в текущем проекте, выполнив следующие действия:
- Создайте пустую игровую площадку и место где-то под вашим проектом.
- Откройте
YourPlayground.playground
комплект (да, это каталог bundle =) в терминале.
- Отредактируйте
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 и снова откройте Playground.
- Теперь должны быть два раздела: один с содержимым вашего файла класса Swift, а другой - с содержимым примера, которое вы получили от создания игровой площадки с нуля.
Таким образом, я могу запустить код, лежащий вне игровой площадки, но Xcode, похоже, чаще всего падает при выполнении этого.
Edit:
Как и в Xcode 6 beta 5, вы теперь можете ссылаться на файлы проекта, как говорит Рик Баллард в своем ответе .
Ответ 3
С Beta 5 Xcode 6 можно импортировать свой код, если он находится в рамках. Что вам нужно сделать, так это создать целевую среду фреймворка, добавить туда файлы Swift и на игровой площадке сделать
import ModuleName
Вы можете найти имя модуля в настройках сборки. Он обычно совпадает с именем цели.
Не забудьте сделать код, который вы хотите увидеть public
. Вам нужно будет создать проект, прежде чем изменения будут доступны на игровой площадке. (Вам также нужно будет отредактировать игровое поле, чтобы вызвать повторное выполнение.)
Внимание!
Не указывайте игровое поле с тем же именем, что и цель! Если вы это сделаете, импорт будет работать, но вы получите следующую ошибку, когда игровая площадка попытается выполнить:
Выполнение игровой площадки не выполнено: ошибка: не удалось найти символы:
Я потратил час на то, чтобы понять это.:)
Ответ 4
Мне не удалось заставить его работать, используя любой из ответов здесь, поэтому я начал играть и нашел простой способ, который работал у меня, чтобы импортировать быстрый класс в игровую площадку.
Просто создайте игровое пространство в своем проекте, theres внутри него, называемый "sources", просто перетащите копию этого класса в эту папку, и игровая площадка будет иметь к ней доступ.
Например:
![введите описание изображения здесь]()
Ответ 5
Я просто поместил ссылки на все мои быстрые файлы в папке Sources
:
cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.swift .
Таким образом, изменения в исходном файле немедленно вступят в силу на вашей игровой площадке. Работала очень красиво.
Xcode 8.2, Swift 3.0.1, macOS Sierra
Ответ 6
Все, что вам нужно сделать - это написать в начале:
import ModuleName
(если ваша площадка помещена в ту же рабочую область, что и framework/project)
Если это не работает:
Он решает много странных ошибок с неудачной инициализацией и импортирует что-то!