ios - Swift - 将 inout 参数传递给 scheduleTimer
问题描述
有没有办法通过 scheduleTimer 方法传递 inout 参数?我想要一个特定的值(在计时器用完之前禁用按钮)。
func Timer(Hz:TimeInterval, Activate: inout Bool, time:Double=10){
let info = ProcessInfo.processInfo
let begin = info.systemUptime
var A=0
// do something
var diff = (info.systemUptime - begin)
print("Time runs\n")
let timer=Timer.scheduledTimer(withTimeInterval: Hz, repeats: true) { timer in
diff=(info.systemUptime - begin)
if (diff>=time){
timer.invalidate()
print("Finished")
Activate = !Activate
A=1
}
}
if (A==1){
print("Will never happen")
}
}
Var A 只是为了表明我也尝试了另一种方法,但没有奏效
解决方案
您的代码似乎不必要地复杂(尽管我可能没有理解目标)。假设我们想要禁用我们的按钮 10 秒钟,然后应该再次启用它。那我们就说
self.myButton.isEnabled = false
self.toggleEnabled(self.myButton, after:10)
toggleEnabled
看起来像这样:
func toggleEnabled(_ enabled:UIButton, after t:Double) {
Timer.scheduledTimer(withTimeInterval: t, repeats: false) { _ in
enabled.isEnabled.toggle()
}
}
如果你真的想要,你可以使用协议来隐藏toggleEnabled
这是一个 UIButton 的事实。但这几乎不需要做这么简单的事情。
推荐阅读
- c - 递增和递减文件指针
- python - 如何将一组定性数据按数量转化为数字?
- r - 如何使用带有pdftools和html链接的自定义函数在R中一次将大量列突变到数据框中?
- go - 附加到 [][]int 切片时结果错误 - CombinationSum 问题
- python - wxPython 应用程序被冻结,直到请求完成
- javascript - 刷新数据表选项卡而不刷新提交
- python - 在 Mac 上使用 Python 将剪贴板历史记录存储在文件中
- c# - 使用 cosmos 客户端将集合中的记录数读取到控制台应用程序
- python - 如何访问嵌套在数据框中的熊猫系列
- php - 尝试发送邮件,但“给定 [xxxx] 邮箱中的地址不符合 RFC 2822, 3.6.2。”