簡體   English   中英

解決“從初始化快速返回之前未在所有路徑上調用Super.init的問題”。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM