我正在尝试在基本的 iOS 应用中实现 BPM 计数器。
我正在使用 this在 XCode 项目中实现,将 addTap
方法连接到屏幕按钮。
但是,我收到错误。
Super.init isn't called on all paths before returning from initializer swift.
接着this我通过在这里搜索找到的答案,我意识到我必须调用 UIViewController 类中定义的 super.init()
。
我已经做到了,如下所示 - 但现在我遇到了另一个编译器错误
Cannot convert value of type 'NSCoder.Type' to expected argument 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())
}
最佳答案
您的问题在于线路:
super.init(coder:NSCoder)
参数需要是 NSCoder
的实例,而不是类本身。但您甚至不应该调用该初始化程序。
将该行更改为:
super.init(nibName: nil, bundle: nil)
关于ios - 在从初始化器 swift 返回之前,在所有路径上调用 'Super.init isn' t 时出现问题。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48977063/