我刚刚升级到Xcode 6.3,他们为Playgrounds提供了一些新功能。如果您创建一个新游乐场并打开项目导航器,您将看到一个Sources文件夹,里面有一个“SupportCode.swift”文件。在该文件的顶部,它读取
此文件(以及此操场的Sources目录中的所有其他Swift源文件)将被预编译到一个框架中,该框架可自动提供给.playground。
我尝试将功能放到那里,我的操场无法使用。我究竟做错了什么?我是否必须手动手动编译SupportCode.swift文件?怎么样?
答案 0 :(得分:156)
您必须将 public 访问属性添加到源文件夹中的类,方法和属性,以使它们可以从主操场文件访问,因为它们被编译器视为单独的模块
答案 1 :(得分:16)
游乐场适合运行测试。
将所有代码放在Sources
目录中,并为每个测试提供一个可公开访问的'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"
}
}
答案 2 :(得分:6)
正如您在Source文件夹中创建.swift文件时所提到的,它们可自动用于您的游乐场代码。
要控制此文件不同部分的访问权限,您可以使用以下访问级别修饰符:Response.Flush();
Response.SuppressContent = true;
,public
& internal
。
根据Swift programming language access control
大多数情况下,默认访问级别为private
,可在模块内部访问,但不在外部访问。
换句话说,如果您声明一个没有访问修饰符的类,您可以从Source文件夹中的另一个文件访问它,但不能在操场的主文件中访问它。 另一方面,如果使用public修饰符声明一个类,则可以在两种情况下访问它。
实际用途: 让我们做一个Singleton实现 第一:我在Source文件夹中创建了一个名为' Singy.swift' 使用以下代码:
internal
第二: 从我的操场上
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!;
}}
s1& s2引用相同的实例,但它只在类
中创建