我是OO /移動編程的新手,我正在製作一個應用程序來進行聲音分析一個調諧器應用程序即將)。'(NSObject) - >() - > ViewController()'不符合期望的類型'classDelegate'
有時候我有點困惑於OO,不能否認它。 正如小標題所說,我得到了這個錯誤,不知道爲什麼。讓我們看代碼ViewController():
import UIKit
import AudioKit
class ViewController: UIViewController, SoundAnalyserDelegate{
let soundAnalyser = SoundAnalyser(delegate: self) //getting error here
@IBOutlet var frequencyLabel: UILabel!
@IBOutlet var amplitudeLabel: UILabel!
@IBOutlet var note: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
soundAnalyser.start()
這部分代碼啓動SoundAnalyser類並委託自己。
看SoundAnalyser代碼:
class SoundAnalyser {
var delegate:SoundAnalyserDelegate?
let minimum = Double(160)
let maximum = Double(1400)
var mic: AKMicrophone
var tracker: AKFrequencyTracker
fileprivate var silence: AKBooster
fileprivate var timer: Timer?
fileprivate var notesArray: [(String, Double)]?
init(delegate: SoundAnalyserDelegate){
mic = AKMicrophone()
tracker = AKFrequencyTracker(mic, hopSize: minimum, peakCount: maximum)
silence = AKBooster(tracker, gain:0)
notesArray = self.getNotesFrequencies()
self.delegate = delegate
}
func start(){
AudioKit.output = silence
在SoundAnalyser(),我嘗試從視圖控制器這裏調用一個函數:
func tick(){
let amp = tracker.amplitude
let freq = tracker.frequency
if amp > 0.05 && freq > minimum && freq < maximum{
let readNote = notesArray![analyseCapturedSound()]
delegate?.setLabelAmp(String(format:"%f", amp)) //Setting the text of a label from the UI
delegate?.setLabelFreq(String(format:"%f", freq))
// delegate?.setLabelNote(String(format:"%f", readNote))
print("freq:", freq," amp:", amp," NOTE: \(readNote)")
}
}
這是非常錯誤的觀點OO點?或者我忘記了什麼?
我的意思是說,從'父親'類中調用func ...似乎並不是最好的面向對象的方式,但它是唯一我看到要做到的。
如果需要,您可以在這裏檢查項目:
https://github.com/denisb411/Microphone_Analyser_AK
在此先感謝。
呼叫委託'soundAnalyser.delegate = self' –
您可以使用'lazy'屬性 - 例如參見http://stackoverflow.com/q/36996573/2976878 – Hamish