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