Может ли Swift игровые площадки видеть другие исходные файлы в одном проекте?
Я создал самый простой пользовательский класс в отдельном файле Swift в моем проекте:
class Foo
{
init()
{
println("I made a foo.")
}
}
Затем, на игровой площадке в том же проекте, я попробовал
var x = Foo()
Xcode, похоже, не понравилось, и сказал, что "Foo" - это неразрешенный идентификатор. Я несколько смущен тем, как игровые площадки вписываются в остальную часть структуры проекта, так как любой другой файл Swift в моем проекте может решить проблему "Foo" без проблем.
Как я могу заставить свою площадку использовать пользовательские классы, которые я определяю в других файлах Swift в моем проекте? Я попытался назвать модуль продукта для цели сборки и импортировать его на игровую площадку без успеха: игровая площадка не распознает имя модуля продукта.
Заранее благодарим за помощь. Я знаю, что это что-то простое.
Ответы
Ответ 1
Они не могут. Игровые площадки автономны. Это, надеюсь, изменится в будущем.
Изменить: Начиная с Xcode 6.3, игровые площадки теперь могут содержать поддерживающий код. Они по-прежнему не могут видеть другой код в одном проекте, но код можно добавить в папку поддержки игровой площадки, которая может использоваться на игровой площадке. Подробнее см. блог Swift.
Ответ 2
Существует два способа использования кода проекта на игровой площадке
Папка источников игрушек
Да, в Xcode 6.3 Beta 3 (и, надеюсь, в будущем):
Игровые площадки теперь представлены в Xcode как набор с треугольником раскрытия, который показывает папки Ресурсы и Источники при нажатии. Эти папки содержат дополнительный контент, который легко доступен из основного кода Swift на игровых площадках. Чтобы увидеть эти папки, выберите "Просмотр" > "Навигаторы" > "Показать навигатор проекта" (или просто нажмите "Command-1" ).
Откройте новую игровую площадку и нажмите cmd + 1, чтобы увидеть левую панель, затем перетащите файлы в папку source
, чтобы использовать ее на игровой площадке.
Примечание:
Файлы в исходной папке скомпилированы в фреймворк, что означает, что если вы хотите, чтобы классы, функции и т.д. были доступны на игровой площадке, они должны быть явно отмечены как public
.
public class VisibleClass {
}
class InvisibleClass {
}
Источник: опубликовать блог
Компилировать проект в рамки
- Переместить проект в рабочее пространство, если его еще нет. (Файл → Сохранить как рабочее пространство) выполнит трюк
- Добавить фреймворк в свой проект
- Структура сборки
- Убедитесь, что файлы, к которым вы хотите получить доступ, добавляются в вашу целевую среду framework.
- Добавить Playground в рабочее пространство (НЕ проект)
- Используйте
@testable import YourFrameworkName
- Код доступа на игровой площадке
Я написал здесь статью, которая будет немного подробнее, если вы хотите проверить это.
Ответ 3
Да.
Я начал с добавления файла класса в каталог "Источники".
Я сделал все публично:
После долгих попыток ничего не получилось. XCode потерпел крах, и после повторного открытия все это работало как шарм.
![Using Sources/Dna.swift in Playground]()
Ответ 4
В Xcode 10 Project Navigator:
- Добавьте файл исходного кода в папку Sources для игровой площадки.
- Перетащите файл из папки "Источники" в нужное место в проекте (вы должны увидеть маленький значок "плюс в круг").
- Завершите перетаскивание, а затем в диалоговом окне "Добавить файл" снимите флажок "Копировать при необходимости".
Исходный файл теперь "живет" в пакете детской площадки; Проект ссылается на него (это можно проверить с помощью инспектора файлов).
Я попробовал это с другой стороны: файл живет в папке проекта со ссылкой в папке исходников детской площадки, но он не работает; Я получил две копии файла с исходным кодом.