绕过"Super.init 在从初始值设定项 swift 返回之前不会在所有路径上调用"的问题。



我正在尝试将BPM计数器实现为基本iOS应用。

我正在XCode项目中使用此实现,将addTap方法连接到屏幕按钮。

但是,我收到错误。

super.init在从初始化器swift返回之前,并未在所有路径上调用。

因此,按照我在这里搜索发现的答案之后,我意识到我必须按照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())
}

}

您的问题与行:

super.init(coder:NSCoder)

参数需要是NSCoder的实例,而不是类本身。但是您甚至不应该称呼该初始化器。

将该行更改为:

super.init(nibName: nil, bundle: nil)

相关内容

  • 没有找到相关文章

最新更新