Xcode 6.3にアップグレードしたばかりで、Playgroundsに新しいものを提供してくれました。新しいプレイグラウンドを作成し、プロジェクトナビゲーターを開くと、Sourcesフォルダーが表示され、その中に "SupportCode.Swift"ファイルがあります。そのファイルの一番上で
このファイル(およびこのプレイグラウンドのSourcesディレクトリにある他のすべてのSwiftソースファイル)は、.playgroundで自動的に利用可能になるフレームワークにプリコンパイルされます。
私はそこに関数を入れてみましたが、私の遊び場では利用できません。何が間違っていますか? SupportCode.Swiftファイルを手動でコンパイルする必要がありますか?どうやって?
ソースフォルダー内のクラス、メソッド、およびプロパティにpublic access属性を追加して、コンパイラーによって個別のモジュールとして扱われるため、メインのプレイグラウンドファイルからアクセスできるようにする必要があります
プレイグラウンドは、テストの実行に適しています。すべてのコードをSources
ディレクトリに配置し、テストごとに1つの公開アクセス可能な 'test'クラスを用意します。次に、プレイグラウンドからパブリックにアクセス可能なテストを実行します。
playground
Test1.run()
Testx.run()
...
Sources/Test1.Swift
public class Test1 {
public static func run() {
let my_class = MyClass()
let result = my_class.do_something()
print(result)
}
}
Sources/MyClass.Swift
class MyClass {
func do_something() -> String {
return "lol"
}
}
ソースフォルダーに.Swiftファイルを作成するときに述べたように、これらのファイルはプレイグラウンドコードで自動的に使用可能になります。このファイルの異なる部分のアクセスを制御するには、public
、internal
&private
のアクセスレベル修飾子を使用できます。
ほとんどの場合、デフォルトのアクセスレベルはinternal
で、モジュール内ではアクセスできますが、外部からはアクセスできません。
つまり、アクセス修飾子なしでクラスを宣言すると、ソースフォルダーの別のファイルからアクセスできますが、プレイグラウンドのメインファイルからはアクセスできません。一方、パブリック修飾子を使用してクラスを宣言すると、両方の場合にアクセスできます。
実際に使用するには、まずシングルトン実装を作成しましょう。次のコードを使用して、「Singy.Swift」という名前のSourceフォルダーに新しいファイルを作成します。
public class Singy {
public var name = ""
private static var instance: Singy?
private init() {}
public static func getSingy() -> Singy {
if Singy.instance == nil {
Singy.instance = Singy()
}
return Singy.instance!
}
}
2番目:私の遊び場から
var s1 = Singy.getSingy()
var s2 = Singy.getSingy()
s1.name = "One"
print(s2.name)
両方 s1
およびs2
同じインスタンスを参照しますが、クラス内でのみ作成されます