У меня есть следующий код в Objective-C (который использует рамки Audio Toolbox), что я пытаюсь преобразовать Swift:Как извлечь данные из void UnsafePointer в Swift?
MusicTimeStamp timeStamp;
MusicEventType eventType;
const void *eventData;
UInt32 eventDataSize;
//MusicEventIteratorGetEventInfo is declared in Audio Toolbox framework as this:
//OSStatus MusicEventIteratorGetEventInfo (MusicEventIterator inIterator, MusicTimeStamp *outTimeStamp, MusicEventType *outEventType, const void **outEventData, UInt32 *outEventDataSize);
MusicEventIteratorGetEventInfo(anIterator, &timeStamp, &eventType, &eventData, &eventDataSize);
switch (eventType){
case kMusicEventType_MIDINoteMessage:
//extract info from eventData assuming it's a MIDINoteMessage.
UInt8 channel = ((MIDINoteMessage *) eventData)->channel
UInt8 note = ((MIDINoteMessage *) eventData)->note
UInt8 velocity = ((MIDINoteMessage *) eventData)->velocity
Float32 duration = ((MIDINoteMessage *) eventData)->duration
case kMusicEventType_MIDIChannelMessage:
//extract info from eventData assuming it's a MIDIChannelMessage.
//case ..., etc.
}
Когда переписывание его в Swift, я не могу понять как получить данные из части «const void * eventData», несмотря на чтение документации Apple по небезопасным указателям (ни один из их примеров, похоже, не связан с извлечением данных из небезопасного указателя таким образом). Это то, что я до сих пор, но я потерял в плане того, что должно быть заявление переключатель:
var timeStamp: MusicTimeStamp = 0
var eventType: MusicEventType = 0
var eventData: UnsafeMutablePointer<UnsafePointer<Void>> = nil
var eventDataSize: UInt32 = 0
MusicEventIteratorGetEventInfo(iterator, &timeStamp, &eventType, eventData, &eventDataSize)
//what would simplest equivalent switch statement be?
Любая помощь будет оценена - спасибо.
это сообщение сделок с небезопасными указателями http://stackoverflow.com/questions/24838106/using-audiobufferlist-with-swift?rq=1 – chris
для что-то настолько фундаментальное для основных библиотек Apple, действительно ли нет более простого способа? Честно говоря, я даже не уверен, что могу понять, как применить это сообщение к моему примеру, хотя я уверен, что это полезно для большинства ... –
Я бы использовал Objective-C для этого и позвонил объекты/методы высокого уровня из Swift. Это не должно быть так сложно. –