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