Как импортировать собственные классы из вашего собственного проекта на детскую площадку

StackOverflow https://stackoverflow.com//questions/24045245

  •  21-12-2019
  •  | 
  •  

Вопрос

Предположим на настройку, как это:

    .
  • У вас есть проект XCode 6, где вы реализовали свои собственные классы (скажем, MyView и MyViewController) с Objective-C и Swift
  • Вы добавили детскую площадку в свой проект

на детской площадке, можно импортировать модули (рамки), такие как UIKit с ключевым словом import.Как вы включаете доступ к другим классам проекта с детской площадки?

Просто пытается получить доступ к классам проекта напрямую результаты с сообщением об ошибке: Использование нерешенного идентификатора «MyView»

Это было полезно?

Решение

С помощью XCode 6.0 Beta 5 теперь можно импортировать свои собственные рамки на детскую площадку. Это обеспечивает способ обмена кодом между вашими приложениями и игровыми площадками, которые могут импортировать ваши рамки. Для этого:

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

  2. Вы, должно быть, уже построили свои рамки. Если это Framework iOS, она должна быть построена для 64-битного задания выполнения (например, iPhone 5S) и должна быть создана для симулятора.

  3. У вас должна быть активная схема, которая строит, по крайней мере, одну цель (местоположение построения цели будет использоваться в пути поиска Framework для детской площадки).

  4. Ваше предпочтение «location Build» (в разделе «Дополнительные локации» настроек XCode) не следует устанавливать «Наследие».

  5. Если ваша рамка не является Swift Framework. Настройка настройки сборки «Определяет модуль» необходимо установить «Да».

  6. Вы должны добавить оператор импорта на свою игровую площадку для Framework.

  7. После того, как все эти условия выполнены, импортируя свою структуру будет работать на детской площадке.

    в Xcode 7 Мы представили другой механизм, который вы можете использовать для импорта своих собственных классов в качестве источника, а не импортировать рамки; Вы можете прочитать об этом поддержку «вспомогательных источников» в

Другие советы

На самом деле удалось обратиться к другим 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, который будет указывать за пределы пакета в ваш файл класса SWIFT, например:
ln ../../Classes/MyView.swift section-1.swift
.
    .
  • Закрыть XCode и снова откройте игровую площадку.
  • Теперь должны быть два раздела, один с содержимым файла вашего SWIFT, а другой с примерным контентом, который вы получили от создания детской площадки с нуля.

Таким образом, я могу фактически запустить код, лежащий за пределами игровой площадки, но Xcode, кажется, чаще сражается, когда делает это так.

Редактировать:

На как в XCode 6 Beta 5, теперь вы можете обратиться к файлам проекта, так как Rick Ballard инструктирует в его Ответ .

С момента бета 5 xcode 6 можно импортировать свой код, если он находится в рамках.Что вам нужно сделать, это создать каркасную цель, добавьте SWIFT файлы там и на вашей детской площадке DO

import ModuleName
.

Вы можете посмотреть имя модуля в настройках сборки.Это обычно так же, как имя цели.

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

важно

Не дайте игровой площадке файла того же имени, что и цель!Если вы сделаете, импорт, кажется, работает, но вы получите следующую ошибку, когда игровая площадка пытается выполнить:

Ошибка выполнения игровой площадки

. Ошибка: Не удалось найти символы:

Я потратил впустую час на том, чтобы выяснить это.:)

Я не смог заставить его работать, используя какие-либо ответы здесь, поэтому я начал играть вокруг и нашел простой способ, который работал для меня, чтобы импортировать Swift Class на детскую площадку.

Просто создайте детскую площадку в своем проекте, есть каталог внутри него называется «источники», просто перетащите копию SWIFT класса в эту папку и игровую площадку, затем будет иметь доступ к нему доступ.

<Сильные> Например:

EnternОписание изображения здесь

Я просто поставлю ссылки на все мои SWIFT файлы в папке GenaCodicetacode:

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

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

XCode 8.2, SWIFT 3.0.1, Macos Sierra

Все, что вам нужно сделать - написать в начале:

import ModuleName
.

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

Если это не работает:

  1. восстановить ваш проект

  2. воссоздать игровую площадку и скопировать все из старой детской площадки там

  3. Это решает много странного <прочные> ошибки с ошибкой init и импорт из чего угодно!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top