我有一个 Swift 操场,在源文件夹中包含多个类。这些类具有tick()
函数,这些函数通过while true { }
尽可能快地调用。我正在使用并行线程来执行此操作,以阻止Xcode锁定,使用以下代码:
DispatchQueue.global(qos: .background).async {
BackgroundThread.startMainLoop(scene: scene)
}
// other file
public struct BackgroundThread {
public static func startMainLoop (scene: SKScene) {
let songController = SongController()
let uiManager = UIManager(scene: scene)
// The UIManager is going to modify this scene.
// Will the changes be available to BackgroundThread and/or the main file?
while true {
songController.tick()
uiManager.tick()
}
}
}
由于主操场脚本非常慢,因此我已将重复循环移动到 Sources 文件夹中的已编译类。
我正在将一个SKScene
对象传递给一个UIManager
编译的类,我需要在这个(相对复杂)场景中更新 UI,速度比主游乐场脚本可以管理的速度更快。
主操场脚本调用并行线程中的startMainLoop()
函数。它在SKScene
对象中传递。此函数永远不会返回,因为它包含一个永无止境的循环。有没有办法修改传递的对象,以实时修改屏幕上显示的场景,而无需返回函数(这意味着inout
不是一个选项),假设默认情况下不会发生这种情况?
引用类型意味着值是一个引用 - 即指向对象的指针。传递或分配引用时,您将获得引用的副本(它是按值传递的,没有inout
),但引用的多个副本指向同一对象,并且通过指向它的任何引用对对象的修改可以通过指向它的任何其他引用可见。