Сбой протокола Swift Playground после фиксированного количества итераций - PullRequest
1 голос
/ 16 марта 2019

Для получения стипендии WWDC в этом году необходим формат игры Swift.Я строю свою игровую площадку в приложении, где у меня есть ползунки в UITableViewCells, подключенные к SCNScene и SCNNode и SCNParticleSystem через пользовательский делегат.Он отлично работает как приложение, работающее на Mac, но когда дело доходит до запуска его на быстрых игровых площадках на iPad, метод делегата падает после постоянного числа итераций.Я определил, что это не метод в самом узле, поскольку я сделал это print("Hello"), и он все еще падал с точно такими же 96 итерациями.Узел находился как в исходных файлах, так и в главном файле игровой площадки.Любые идеи или помощь будет принята с благодарностью.

Делегат

protocol ReturnParameterDelegate {
    func parameter1(value: Float)
    func parameter2(value: Float)
    func defaultParameter(value: Float)
}

Ячейка табличного представления

@objc private func returnValue() {
    guard let delegate = delegate else { return }
    print(self.parameter.title)
    switch self.parameter.title {
    case ParameterNames.parameter1:
        delegate.parameter1(value: self.slider.value)
    ...
    }
}

Сцена

public func parameter1(value: Float) {
    node.changeValue(value: value)
}
...

1 Ответ

1 голос
/ 20 марта 2019

После многих часов работы и пробуя это с другими методами, я нашел простое решение: переместить код из основного .playground в отдельные .swift файлы в папке Sources. Хотя это ничего не должно изменить, добавление этого к источникам сделало все мои методы работающими идеально. Это усложняет протоколы, и я заменил их созданием глобального объекта. Он устраняет сбой после постоянного числа итераций и заставляет работать некоторые другие функции, которые ранее не выполнялись (например, изменение diffuse из SCNNode).

...