![](/img/trans.png)
[英]Swift: 'super.init' isn't called on all paths before returning from initializer?
[英]Problems getting around 'Super.init isn't called on all paths before returning from initializer swift.'
我正在嘗試在基本的iOS應用中實現BPM計數器。
我在XCode項目中使用此實現,將addTap
方法連接到屏幕上的按鈕。
但是,我收到此錯誤。
從初始化程序swift返回之前,並非在所有路徑上都調用Super.init。
所以,下面這個答案我發現通過搜索在這里,我意識到我必須調用super.init()
作為UIViewController類中定義。
我已經做到了,如下所示-但是現在我又遇到了另一個編譯器錯誤
無法將類型“ 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.