swift - 未执行 bpm 代码的点击按钮
问题描述
我正在尝试创建一个简单的控制器,每次用户单击按钮时都会为您提供每分钟的节拍。我的代码编译成功,但由于某种原因没有调用按钮操作中的代码。对我做错了什么有任何想法吗?
import Foundation
import UIKit
class taptempo: UIViewController {
private var timeOutInterval = 5.0
private var minTaps = 3
private var taps: [NSDate] = []
var calculatedbpm = 0
var timeOut = 5
var minimumTaps = 3
@IBOutlet weak var tapnumberlabel: UILabel!
@IBOutlet weak var tapnumberbutton: UIButton!
override func viewDidLoad(){
super.viewDidLoad()
self.tapnumberlabel.text = "\(calculatedbpm)"
}
@IBAction func tapnumberbutaction(_ sender: Any) {
func addTap() -> Int? {
let thisTap = NSDate()
if let lastTap = taps.last {
if thisTap.timeIntervalSince(lastTap as Date) > timeOutInterval {
taps.removeAll()
}
}
taps.append(thisTap)
guard taps.count >= minTaps else { return nil }
guard let firstTap = taps.first else { return 0 }
let avgIntervals = thisTap.timeIntervalSince(firstTap as Date) / Double(taps.count - 1)
calculatedbpm = Int((60.0 / avgIntervals))
self.tapnumberlabel.text = "\(calculatedbpm)"
print(calculatedbpm)
return calculatedbpm
// print("func not working")
}
}
}
解决方案
您需要定义一个在函数体之外计算 bmp 的函数。在按钮操作中只需调用它并更新 ui。
@IBAction func tapnumberbutaction(_ sender: Any) {
self.tapnumberlabel.text = "\(addTap() ?? 0)" // conditional unwrap of returned value
}
func addTap() -> Int? {
let thisTap = NSDate()
if let lastTap = taps.last {
if thisTap.timeIntervalSince(lastTap as Date) > timeOutInterval {
taps.removeAll()
}
}
taps.append(thisTap)
guard taps.count >= minTaps else { return nil }
guard let firstTap = taps.first else { return 0 }
let avgIntervals = thisTap.timeIntervalSince(firstTap as Date) / Double(taps.count - 1)
calculatedbpm = Int((60.0 / avgIntervals))
print(calculatedbpm)
return calculatedbpm
}
推荐阅读
- amazon-web-services - aws批量提交作业错误无效json
- php - 将自定义分类添加到我的自定义帖子类型 wordpress
- angular - 如何在我的应用程序中使用拦截器的标头
- javascript - 如何在 Dialogflow Messenger 上使用丰富的响应消息,如建议芯片?
- java - 在单个 SQL 查询中使用 PreparedStatment 在循环中使用 setter 进行多次插入
- python - 如何将使用 Tika 从 PDF 中提取的文本放入 JSON?
- anova - 不平衡单向方差分析
- c++ - Boost 1.71.0:如何获得进程输出?
- html - 无法制作 3x3 网格照片
- css - 如何在顺风 css 中使用颜色或 css/scss 中的材质 ui