2014-06-12 1 views
0

일부 코코아 클래스, 예를 들어 AVFoundation의 AVAudioPCMBufferfloat * 유형을 사용하여 Objective-C에 노출 된 부동 소수점 데이터 배열을 처리합니다.UnsafeArray <CFloat>을 Swift의 배열 <Float>으로 어떻게 변환합니까?

예를 들어 AVAudioPCMBuffer 용 대물-C 프로토 타입은 다음

@property(nonatomic, readonly) float *const *floatChannelData 

스위프트 당량이다

var floatChannelData: UnsafePointer<UnsafePointer<CFloat>> { get } 

내부 UnsafePointer<>UnsafeArray()를 사용 UnsafeArray<CFloat>을 풀었하지만 방법이 수 가능 그런 다음 보통 스위프트 Array<Float>으로 변환 하시겠습니까?

각 플로트를 반복하면서 각 어레이를 새로운 Array로 복사 할 수는 있지만 비용이 많이 들며 대형 어레이에서는 실제로 구현할 수 없습니다.

답변

3

스위프트 배열은 임의의 C float [] 배열과 다른 레이아웃과 메모리 관리를 갖는 불투명 한 구조체로 싸여 있습니다. 따라서 Swift Array 구문을 사용하거나 Swift 배열 (이미 Swift 구조체에 래핑 된)에 UnsafePointer를 C 또는 Objective C API로 전달하려면 데이터를 복사해야합니다. 당신이 데이터를 다시 얻을 때.

관련 문제