2015-10-11 3 views
1

Как написать этот Objective C-код в Swift?Objective C static const in swift

#import "FFTViewController.h" 

//only this part 
static vDSP_Length const FFTViewControllerFFTWindowSize = 4096; 

@implementation FFTViewController 

Моя идея

let vDSP: vDSP_Length = 4096 

я уверен, что это не правильно, но я понятия не имею.

спасибо за помощь

Update:

Я хочу, чтобы порт этот объектный код C для быстрой

#import "FFTViewController.h" 

static vDSP_Length const FFTViewControllerFFTWindowSize = 4096; 

@implementation FFTViewController 


- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

// 
// Setup the AVAudioSession. EZMicrophone will not work properly on iOS 
// if you don't do this! 
// 
AVAudioSession *session = [AVAudioSession sharedInstance]; 
NSError *error; 
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; 
if (error) 
{ 
    NSLog(@"Error setting up audio session category: %@", error.localizedDescription); 
} 
[session setActive:YES error:&error]; 
if (error) 
{ 
    NSLog(@"Error setting up audio session active: %@", error.localizedDescription); 
} 

// 
// Setup time domain audio plot 
// 
self.audioPlotTime.plotType = EZPlotTypeBuffer; 
self.maxFrequencyLabel.numberOfLines = 0; 

// 
// Setup frequency domain audio plot 
// 
self.audioPlotFreq.shouldFill = YES; 
self.audioPlotFreq.plotType = EZPlotTypeBuffer; 
self.audioPlotFreq.shouldCenterYAxis = NO; 

// 
// Create an instance of the microphone and tell it to use this view controller instance as the delegate 
// 
self.microphone = [EZMicrophone microphoneWithDelegate:self]; 

// 
// Create an instance of the EZAudioFFTRolling to keep a history of the incoming audio data and calculate the FFT. 
// 
self.fft = [EZAudioFFTRolling fftWithWindowSize:FFTViewControllerFFTWindowSize 
            sampleRate:self.microphone.audioStreamBasicDescription.mSampleRate 
             delegate:self]; 

// 
// Start the mic 
// 
[self.microphone startFetchingAudio]; 
} 

Это мое начало

import UIKit 
import Accelerate 


class ViewController: UIViewController, EZMicrophoneDelegate{ 

var mic: EZMicrophone! 
var fft: EZAudioFFTRolling! 
private let FFTViewControllerFFTWindowSize: vDSP_Length = 4096 

override func loadView() { 
    super.loadView() 

    mic = EZMicrophone(delegate: self, startsImmediately: true) 
    fft = EZAudioFFTRolling(windowSize: FFTViewControllerFFTWindowSize, sampleRate: mic.audioStreamBasicDescription().mSampleRate, delegate: self) 


} 


} 

Я стал следующее сообщение об ошибке:

компиляция завершается со следующей ошибкой: «Невозможно вызвать инициализатор для типа„EZAudioFFTRolling“со списком аргументов типа '(windowSize: vDSP_Length, SAMPLERATE: Float64, делегат: ViewController)»

Как моя проблема? Извините за этот вопрос, у меня нет фона ObjectiveC, это небольшой вызов для этого порта для меня.

Спасибо за помощь

ответ

0

Проблема вы получаете сообщение об ошибке находится в типах. Когда вы начинаете вводить инициализатор EZAudioFFTRolling в XCode, автозаполнение помогает вам, отображая спецификацию. Это выглядит следующим образом:

EZAudioFFTRolling(windowSize: vDSP_Length, sampleRate: Float, delegate: EZAudioFFTDelegate!) 

Если сравнивать типы параметров из спецификации с фактическими значениями вы проходящими, вы будете выяснить, что mic.audioStreamBasicDescription() mSampleRate имеет тип Float64, но должно быть Float (они. фактически не то же самое), а сам не соответствует протоколу EZAudioFFTDelegate. Поэтому, изменив свою линию на это

fft = EZAudioFFTRolling(windowSize: FFTViewControllerFFTWindowSize, sampleRate: Float(mic.audioStreamBasicDescription().mSampleRate), delegate: self) 

и добавив соответствие протокола, вы сможете создать свой код.

Swift - это тип безопасности в отличие от Objective-C, поэтому общие проблемы, с которыми сталкиваются все разработчики Objective-C, когда начинают работать со Swift. Но ошибки действительно помогают вам, поэтому внимательно прочитайте их.

+0

Ну ладно, очень интересно с поплавком, спасибо за помощь –