我正在尝试将BPM计数器实现到基本的iOS应用程序中。
我在XCode项目中使用this实现,将addTap
方法连接到屏幕按钮。
但是,我收到错误。
在从初始化程序swift返回之前,不会在所有路径上调用Super.init。
所以在我通过搜索找到的this回答后,我意识到我必须按照UIViewController类中的定义调用super.init()
。
我已经完成了,如下所示 - 但现在我又遇到了另一个编译错误
无法将“NSCoder.Type”类型的值转换为预期的参数类型“NSCoder”
我现在所拥有的内容贴在下面,TIA
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var display: UILabel!
private let timeOutInterval: TimeInterval
private let minTaps: Int
private var taps: [Date] = []
init(timeOut: TimeInterval, minimumTaps: Int) {
timeOutInterval = timeOut
minTaps = minimumTaps
super.init(coder:NSCoder)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func addTap() -> Double? {
let thisTap = NSDate()
if let lastTap = taps.last {
if thisTap.timeIntervalSince(lastTap) > timeOutInterval {
taps.removeAll()
}
}
taps.append(thisTap as Date)
guard taps.count >= minTaps else { return nil }
guard let firstTap = taps.first else { return nil }
let avgIntervals = thisTap.timeIntervalSince(firstTap) / Double(taps.count - 1)
return 60.0 / avgIntervals
}
@IBAction func button(_ sender: Any) {
self.display.text = String(addTap())
}
}
答案 0 :(得分:2)
您的问题在于:
super.init(coder:NSCoder)
参数必须是NSCoder
的实例,而不是类本身。但你甚至不应该叫那个初始化器。
将该行更改为:
super.init(nibName: nil, bundle: nil)