Ответ 1
Вы должны добавить общедоступный атрибут доступа к своим классам, методам и свойствам в исходной папке, чтобы сделать их доступными из основного файла детской площадки, поскольку они обрабатываются компилятором как отдельный модуль
Я просто обновился до Xcode 6.3, и они предложили что-то новое для игровых площадок. Если вы создадите новые игровые площадки и откроете навигатор проекта, вы увидите папку Sources, внутри которой есть файл "SupportCode.swift". В верхней части этого файла он читает
Этот файл (и все другие исходные файлы Swift в каталоге Sources этой игровой площадки) будут предварительно скомпилированы в среду, которая автоматически становится доступной для .playground.
Я попытался добавить туда функцию, которая недоступна для моей игровой площадки. Что я делаю неправильно? Нужно ли вручную компилировать файл SupportCode.swift вручную? Как?
Вы должны добавить общедоступный атрибут доступа к своим классам, методам и свойствам в исходной папке, чтобы сделать их доступными из основного файла детской площадки, поскольку они обрабатываются компилятором как отдельный модуль
Игровые площадки хороши для запуска тестов.
Поместите весь свой код в каталог Sources
и получите один общедоступный класс "тест" для каждого теста.
Затем запустите общедоступные тесты с детской площадки.
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
.
В соответствии с Swift язык управления доступом
Уровень доступа по умолчанию в большинстве случаев является internal
который доступен внутри модуля, но не снаружи.
Другими словами, если вы объявляете класс без модификатора доступа, вы можете получить к нему доступ из другого файла в папке Source, но НЕ в главном файле вашей игровой площадки. с другой стороны, если вы объявляете класс с публичным модификатором, вы можете получить к нему доступ в обоих случаях.
для практического использования: давайте создадим реализацию Singleton. Сначала: я создаю новый файл в папке Source с именем 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
ссылаются на один и тот же экземпляр, но он создан только внутри класса