定时器选择器中完成的函数
Function with Completion in Timer Selector
我这样声明一个函数:
@objc func fetchDatabase(completion: ((Bool) -> Void)? = nil)
我允许补全为 nil
,因此我可以将其称为 fetchDatabase()
或
fetchDatabase(completion: { (result) in
// Stuff in here
})
不过,我也在尝试在 #selector
中使用此函数以获得 Timer
。我正在使用以下行创建此计时器:
Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(fetchDatabase), userInfo: nil, repeats: true)
没有完成,这个运行没问题。但是,添加完成后,每当计时器为 运行 时,我都会收到 EXC_BAD_ACCESS
错误。如果这确实是错误,将不胜感激正确构建此选择器的一些帮助。
在调用站点应用默认参数,因此您需要生成两个单独的方法(其中一个调用另一个):
func fetchDatabase() { fetchDatabase(callback:nil) }
func fetchDatabase(callback:()->()) {
...
}
现在您的 scheduledTimer
调用应该可以正常工作了。
传递给计时器的选择器只允许两种可能的签名之一
someFunction()
someFunction(someLabel someParameter: Timer)
您无法传递 fetchDatabase(completion:)
函数,因为它与两个合法选择器签名中的任何一个都不匹配。
您需要传递一个有效的选择器,该选择器又会调用您的 fetchDatabase(completion:)
函数。例如:
@objc timerHandler() {
fetchDatabase(completion: { (result) in
// Stuff in here
})
}
将 #selector(timerHandler)
与您的计时器一起使用。
我这样声明一个函数:
@objc func fetchDatabase(completion: ((Bool) -> Void)? = nil)
我允许补全为 nil
,因此我可以将其称为 fetchDatabase()
或
fetchDatabase(completion: { (result) in
// Stuff in here
})
不过,我也在尝试在 #selector
中使用此函数以获得 Timer
。我正在使用以下行创建此计时器:
Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(fetchDatabase), userInfo: nil, repeats: true)
没有完成,这个运行没问题。但是,添加完成后,每当计时器为 运行 时,我都会收到 EXC_BAD_ACCESS
错误。如果这确实是错误,将不胜感激正确构建此选择器的一些帮助。
在调用站点应用默认参数,因此您需要生成两个单独的方法(其中一个调用另一个):
func fetchDatabase() { fetchDatabase(callback:nil) }
func fetchDatabase(callback:()->()) {
...
}
现在您的 scheduledTimer
调用应该可以正常工作了。
传递给计时器的选择器只允许两种可能的签名之一
someFunction()
someFunction(someLabel someParameter: Timer)
您无法传递 fetchDatabase(completion:)
函数,因为它与两个合法选择器签名中的任何一个都不匹配。
您需要传递一个有效的选择器,该选择器又会调用您的 fetchDatabase(completion:)
函数。例如:
@objc timerHandler() {
fetchDatabase(completion: { (result) in
// Stuff in here
})
}
将 #selector(timerHandler)
与您的计时器一起使用。