Swift 固定迭代次数后 Playground 协议崩溃

Swift Playground Protocol Crashing after Fixed Number of Iterations

对于今年的 WWDC 奖学金,要求的格式是 Swift 游乐场。我正在一个应用程序中构建我的游乐场,其中 UITableViewCells 中的滑块通过自定义委托连接到 SCNcene 和 SCNNode 以及 SCNParticleSystem。作为一个应用程序,运行 它在 Mac 上运行 运行 非常好,但是当涉及到 运行 时,它在 swift 游乐场上 [=23] =],委托方法在一定次数的迭代后崩溃。我已经确定它不是节点本身的方法,因为我做了这个 print("Hello") 并且它仍然因完全相同的 96 次迭代而崩溃。该节点已在源文件和主要游乐场文件中。任何想法或帮助将不胜感激。

代表

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

Table 查看单元格

@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)
}
...

经过数小时的工作并尝试使用其他方法,我找到了一个简单的解决方案:将代码从主 .playground 移动到 .swift 文件夹中的单独 Sources 文件.虽然这不会改变任何东西,但将它添加到源代码中可以使我的所有方法都能完美运行。这确实使协议复杂化,但是我用创建全局对象代替了它们。它确实在固定次数的迭代后消除了崩溃,并且它使某些以前没有的其他功能起作用(例如,更改 SCNNodediffuse)。

我将所有内容移至源文件。而且效果更好一点。