gpt4 book ai didi

swift - 使用 Timer 时未实现 methodSignatureForSelector 和无法识别的选择器

转载 作者:行者123 更新时间:2023-11-30 11:02:41 26 4
gpt4 key购买 nike

这里我有一个简单的类,每秒多次打印“test”:

import Foundation

class TestClass {

static var count = 0
static var timer = Timer()

init() {
TestClass.start()
}

static func start() {
TestClass.timer = Timer.scheduledTimer(timeInterval: 1.0/5.0, target: self, selector: #selector(printTest), userInfo: nil, repeats: true)
}

@objc func printTest() {
print(count)
count += 1
}
}

我将函数start设置为变量timerstatic,以便稍后我可以从另一个类启动和停止计时器

在我的主 ViewController 文件中,我只需通过以下方式创建一个新的 TestClass:

let _ = TestClass()

然后我尝试通过执行以下操作来停止和启动计时器:

if /*something*/ {
TestClass.timer.invalidate()
}

if /*something else*/ {
TestClass.start()
}

但是,当我运行该项目时,我在控制台中收到多个错误:

NSForwarding: warning: object 0x10eaab580 of class 'DeleteMe.TestClass' does not implement methodSignatureForSelector: -- trouble ahead

Unrecognized selector +[DeleteMe.TestClass printTest]

我必须在类中修改某些内容才能解决错误吗?

最佳答案

问题是 start 是一个 static 方法,因此 self 是类,而不是实例。这意味着 printTest 也需要是static

但是为什么这些是静态的?为什么创建一个实例只是为了调用静态 start 方法?

摆脱init并简单地使用TestClass.start()

或者使所有内容都成为适当的实例属性和实例方法。然后,您可以创建单独的 TestClass 实例,每个实例都有自己的计时器。

关于swift - 使用 Timer 时未实现 methodSignatureForSelector 和无法识别的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53136572/

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