Может ли 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

Да. Я начал с добавления файла класса в каталог "Источники". Я сделал все публично:

  • класс
  • init
  • Участники

После долгих попыток ничего не получилось. XCode потерпел крах, и после повторного открытия все это работало как шарм.

Using Sources/Dna.swift in Playground

Ответ 4

В Xcode 10 Project Navigator:

  1. Добавьте файл исходного кода в папку Sources для игровой площадки.
  2. Перетащите файл из папки "Источники" в нужное место в проекте (вы должны увидеть маленький значок "плюс в круг").
  3. Завершите перетаскивание, а затем в диалоговом окне "Добавить файл" снимите флажок "Копировать при необходимости".

Исходный файл теперь "живет" в пакете детской площадки; Проект ссылается на него (это можно проверить с помощью инспектора файлов).

Я попробовал это с другой стороны: файл живет в папке проекта со ссылкой в папке исходников детской площадки, но он не работает; Я получил две копии файла с исходным кодом.