Подтвердить что ты не робот

Игровые площадки Xcode не могут получить доступ к быстрым файлам в папке Sources

Я просто обновился до Xcode 6.3, и они предложили что-то новое для игровых площадок. Если вы создадите новые игровые площадки и откроете навигатор проекта, вы увидите папку Sources, внутри которой есть файл "SupportCode.swift". В верхней части этого файла он читает

Этот файл (и все другие исходные файлы Swift в каталоге Sources этой игровой площадки) будут предварительно скомпилированы в среду, которая автоматически становится доступной для .playground.

Я попытался добавить туда функцию, которая недоступна для моей игровой площадки. Что я делаю неправильно? Нужно ли вручную компилировать файл SupportCode.swift вручную? Как?

4b9b3361

Ответ 1

Вы должны добавить общедоступный атрибут доступа к своим классам, методам и свойствам в исходной папке, чтобы сделать их доступными из основного файла детской площадки, поскольку они обрабатываются компилятором как отдельный модуль

Ответ 2

Игровые площадки хороши для запуска тестов. Поместите весь свой код в каталог 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"
  }
}

Ответ 3

Как уже упоминалось, когда вы создаете .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 ссылаются на один и тот же экземпляр, но он создан только внутри класса