gpt4 book ai didi

ios - 选择器未从 scheduledTimerWithTimeInterval 触发

转载 作者:行者123 更新时间:2023-11-28 08:39:35 28 4
gpt4 key购买 nike

我检查了关于这个主题的现有帖子并用谷歌搜索了它,但我无法找出我的错误或使它对我有用。我在 ChessPlayer 类中有一个函数 iterativeDeepening()。说 15 秒后,我想停止函数内的进一步迭代。在下面的代码中,永远不会调用函数“flagSetter”。如果我使用 NSTimer.fire() 函数会立即调用,而不是在 15 秒后调用。我尝试将 flagSetter 函数放在 iterativeDeepening() 之前或之后。这两种情况都不起作用。我做错了什么?

class ChessPlayer {
var timeoutFlag = false
//Code

func iterativeDeepening() {

***//variables and constants***

let timer = NSTimer.scheduledTimerWithTimeInterval(15.0, target: self, selector: #selector(self.flagSetter), userInfo: nil, repeats: false)

***while minDepth <= maxDepth
{
// Loop iteration code
if timeoutFlag { break out of loop }
}***

}

@objc func flagSetter(timer: NSTimer) {
print("flag changed to true")
self.timeoutFlag = true
timer.invalidate()
}
}

要求:

  1. computerThinking() 是从 GameScene 的人类移动 Action 完成处理程序中触发的。
  2. GameScene.computerThinking() 调用 ChessPlayer.iterativeDeepening()
  3. iterativeDeepening 运行一个递增“深度”的 while 循环。对于每个“深度”,都会评估该深度的最佳移动。深度越高,评估越详细。
  4. 在 15.0 秒后,我想用当时可用的深度和最佳移动跳出 while 循环。

最佳答案

我是 Objective-c 的爱好者,但从未在我的项目中使用过 Swift。谷歌搜索 NSTimer Swift,我发现了以下正确实现 NSTimer 的步骤。

我们需要定义我们的 NSTimer。我们需要的第一个变量是一个名为 NSTimer 类型的定时器变量。我们这样做:

var timer = NSTimer()

启动 NSTimer 定时器:

timer = NSTimer.scheduledTimerWithTimeInterval(15.0, target:self, selector:#selector(ChessPlayer.flagSetter(_:)), userInfo: nil, repeats: false)

并且您的方法 flagSetter 应该定义为:

func flagSetter(timer: NSTimer) {
print("flag changed to true")
self.timeoutFlag = true
timer.invalidate()
}

现在这肯定会起作用,因为我已经制作了我的第一个应用程序,只是为了这个问题,是用 Swift 制作的。检查我如何放置选择器。顺便说一句,你对警告是正确的。

如果您需要有关选择器的更多信息,请查看此线程:@selector() in Swift?

关于ios - 选择器未从 scheduledTimerWithTimeInterval 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36732400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com