在从初始化程序swift返回之前,没有在所有路径上调用'Super.init'。

时间:2018-02-25 18:41:52

标签: ios swift

我正在尝试将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())
}

}

1 个答案:

答案 0 :(得分:2)

您的问题在于:

super.init(coder:NSCoder)

参数必须是NSCoder的实例,而不是类本身。但你甚至不应该叫那个初始化器。

将该行更改为:

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