次のようなセットアップを想定します。
プレイグラウンドでは、UIKit
キーワードを使用してimport
などのモジュール(フレームワーク)をインポートできます。プレイグラウンドからプロジェクトの他のクラスへのアクセスをどのように有効にしますか?
プロジェクトクラスに直接アクセスしようとすると、エラーメッセージが表示されます。未解決の識別子 'MyView'の使用
Xcode 6.0 Beta 5では、独自のフレームワークをプレイグラウンドにインポートできるようになりました。これにより、アプリケーションとプレイグラウンド間でコードを共有する方法が提供され、どちらもフレームワークをインポートできます。これをする:
プレイグラウンドは、フレームワークを生成するプロジェクトと同じワークスペースにある必要があります。ワークスペースには、事前に構築されたフレームワークを使用する代わりに、フレームワークを生成するターゲットが含まれている必要があります。
フレームワークをすでに構築している必要があります。 iOSフレームワークの場合、64ビットの実行先(iPhone 5sなど)用にビルドする必要があり、シミュレーター用にビルドする必要があります。
少なくとも1つのターゲットをビルドするアクティブなスキームが必要です(そのターゲットのビルド場所は、プレイグラウンドのフレームワーク検索パスで使用されます)。
「Xcodeの高度な「場所」設定での)「場所の構築」設定を「レガシー」に設定しないでください。
フレームワークがSwiftフレームワークではない場合、[モジュールの定義]ビルド設定は[はい]に設定する必要があります。
フレームワークのプレイグラウンドにimportステートメントを追加する必要があります。
これらの条件がすべて満たされると、フレームワークのインポートはプレイグラウンドで機能します。
Xcode 7では、フレームワークをインポートする代わりに、独自のクラスをソースとしてインポートするために使用できる別のメカニズムを導入しました。 http://help.Apple.com/xcode/mac/8.0/#/devfa5bea3af でこの「補助ソース」サポートについて読むことができます。
実際に、これを行うことで現在のプロジェクトの他のSwiftファイルを参照することができました。
YourPlayground.playground
バンドル(はい、bundle =ディレクトリ)を開きます。vi
を使用してcontents.xcplayground
を編集し、次のような別のセクションを追加します。<?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
に変更します(Playgroundをゼロから作成した場合は、バンドルにsection-1.Swift
の例があります)section-1.Swift
という名前のハードリンク(シンボリックリンクは機能しないようです)を追加します:ln ../../Classes/MyView.Swift section-1.Swift
この方法で、実際にPlaygroundの外にあるコードを実行できますが、このようにするとXcodeが頻繁にクラッシュするようです。
編集:
Xcode 6ベータ5では、Rick Ballardが answer で指示しているように、プロジェクトファイルを参照できるようになりました。
Xcode 6のベータ5以降、フレームワーク内にある場合はコードをインポートできます。あなたがする必要があるのは、フレームワークターゲットを作成し、そこにSwiftファイルを追加し、あなたの遊び場で
import ModuleName
ビルド設定でモジュール名を検索できます。通常、ターゲット名と同じです。
public
を見たいコードを忘れずに作成してください。プレイグラウンドで変更が利用可能になる前に、プロジェクトをビルドする必要があります。 (プレイグラウンドを編集して再実行をトリガーする必要もあります。)
プレイグラウンドファイルにターゲットと同じ名前を付けないでください!そうすると、インポートは機能しているように見えますが、プレイグラウンドが実行を試みると、次のエラーが表示されます。
プレイグラウンドの実行に失敗しました:エラー:シンボルを検索できませんでした:
私はそれを理解するのに1時間を無駄にしました。 :)
Sources
フォルダー内のすべてのSwiftファイルへのリンクを配置するだけです。
cd /path/to/project/MyPlayground.playground/Sources
ln -s ../../*.Swift .
このようにして、ソースファイルの変更はすぐにプレイグラウンドで有効になります。 非常にうまく機能した。
Xcode 8.2、Swift 3.0.1、macOS Sierra