Xcode操场可以';t访问源文件夹中的swift文件

Xcode操场可以';t访问源文件夹中的swift文件,swift,swift-playground,xcode6.3,Swift,Swift Playground,Xcode6.3,我刚升级到Xcode 6.3,他们为操场提供了一些新的东西。如果创建一个新的游乐场并打开项目导航器,您将看到一个Sources文件夹,其中有一个“SupportCode.swift”文件。在该文件的顶部,它读取 此文件(以及此游乐场的Sources目录中的所有其他Swift源文件)将预编译到一个框架中,该框架将自动提供给.playerly 我试着在那里设置一个功能,但我的操场上没有。我做错了什么?我是否必须手动编译SupportCode.swift文件?如何操作?您必须向源文件夹中的类、方法和属

我刚升级到Xcode 6.3,他们为操场提供了一些新的东西。如果创建一个新的游乐场并打开项目导航器,您将看到一个Sources文件夹,其中有一个“SupportCode.swift”文件。在该文件的顶部,它读取

此文件(以及此游乐场的Sources目录中的所有其他Swift源文件)将预编译到一个框架中,该框架将自动提供给.playerly


我试着在那里设置一个功能,但我的操场上没有。我做错了什么?我是否必须手动编译SupportCode.swift文件?如何操作?

您必须向源文件夹中的类、方法和属性添加publicaccess属性,以使它们可以从主游乐场文件中访问,因为编译器将它们视为单独的模块

,正如您在源文件夹中创建.swift文件时所述,游乐场代码可以自动使用它们。 要控制对此文件不同部分的访问,可以使用访问级别修饰符,这些修饰符是:
public
internal
&
private

大多数情况下,默认访问级别为
内部
,可在模块内部访问,但不能在模块外部访问

换句话说,如果您声明了一个没有访问修饰符的类,您可以从源文件夹中的另一个文件访问它,但不能从游乐场的主文件中访问。 另一方面,若你们用公共修饰符声明一个类,你们可以在这两种情况下访问它

对于实际用途: 让我们做一个单例实现 第一:我在源文件夹中创建了一个名为“Singy.swift”的新文件 代码如下:

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!
    }
}
第二: 从我的操场

var s1 = Singy.getSingy()
var s2 = Singy.getSingy()
s1.name = "One"
print(s2.name)

s1
s2
都引用了相同的实例,但它仅在类中创建

操场适合运行测试。 将所有代码放在
Sources
目录中,并为每个测试创建一个可公开访问的“test”类。 然后在操场上运行可公开访问的测试

操场

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)
  }
}
class MyClass {
  func do_something() -> String {
    return "lol"
  }
}
Sources/MyClass.swift

public class Test1 {      
  public static func run() {
    let my_class = MyClass()
    let result = my_class.do_something()
    print(result)
  }
}
class MyClass {
  func do_something() -> String {
    return "lol"
  }
}

我觉得很奇怪,我必须公开一个类并公开它的init函数。如果我们有类似于playgrounds@Calimari328将类声明为public将使其在外部可见,但将init()声明为public将从外部实例化(创建实例)。因此,当您希望授予对类的访问权,但同时限制它的实例化时,可以将init()声明为不太可见。我给出了一个单例实现的例子——为了弄清楚为什么需要Test1类和静态“run”方法?为什么不创建一个公共的全局test1()函数呢?实现与不添加任何内容的类相同的功能。