1

私はオブジェクト指向/モバイル プログラミングの初心者であり、サウンド分析を行うアプリの作成に取り組んでいます (チューナー アプリにすぐに到達しようとしています)。

私は時々 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() で、ここで ViewController から関数を呼び出そうとします。

        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

前もって感謝します。

4

1 に答える 1