2014-09-02 23 views
6

Potrzebuję trochę pomocy konwersji tegoPotrzebujesz pomocy konwersji (CFPropertyListRef *) NSDictionary do szybkiej

MIDIDeviceRef midiDevice = MIDIGetDevice(i); 
NSDictionary *midiProperties; 

MIDIObjectGetProperties(midiDevice, (CFPropertyListRef *)&midiProperties, YES); 
NSLog(@"Midi properties: %d \n %@", i, midiProperties); 

do szybkich. Mam to, ale odkładam słuchawkę na casting CFPropertList.

var midiDevice = MIDIGetDevice(index) 
let midiProperties = NSDictionary() 

MIDIObjectGetProperties(midiDevice, CFPropertyListRef(midiProperties), 1); 
println("Midi properties: \(index) \n \(midiProperties)"); 

Każda pomoc będzie świetna.

Dzięki

+0

Używasz zbudowany obiekt na stałe. Potrzebujesz wskaźnika do NSDictionary, więc MIDIObjectGetProperties może utworzyć obiekt i nadpisać go, zwracając wartość. –

Odpowiedz

7

To jest podpis dla MIDIObjectGetProperties w Swift:

func MIDIObjectGetProperties(obj: MIDIObjectRef, outProperties: UnsafeMutablePointer<Unmanaged<CFPropertyList>?>, deep: Boolean) -> OSStatus 

Więc trzeba przekazać w sposób UnsafeMutablePointer Do Unmanaged<CFPropertyList>?:

var midiDevice = MIDIGetDevice(0) 
var unmanagedProperties: Unmanaged<CFPropertyList>? 

MIDIObjectGetProperties(midiDevice, &unmanagedProperties, 1) 

Teraz masz swoje właściwości, ale są one w zmiennej niezarządzanej - możesz użyć metody takeUnretainedValue(), aby je usunąć, a następnie rzucić wynikową CFPropertyList do NSDictionary:

if let midiProperties: CFPropertyList = unmanagedProperties?.takeUnretainedValue() { 
    let midiDictionary = midiProperties as NSDictionary 
    println("Midi properties: \(index) \n \(midiDictionary)"); 
} else { 
    println("Couldn't load properties for \(index)") 
} 

Wyniki:

Midi properties: 0 
{ 
    "apple.midirtp.errors" = <>; 
    driver = "com.apple.AppleMIDIRTPDriver"; 
    entities =  (
    ); 
    image = "/Library/Audio/MIDI Drivers/AppleMIDIRTPDriver.plugin/Contents/Resources/RTPDriverIcon.tiff"; 
    manufacturer = ""; 
    model = ""; 
    name = Network; 
    offline = 0; 
    scheduleAheadMuSec = 50000; 
    uniqueID = 442847711; 
} 
+0

Pracował jak urok - dzięki –

Powiązane problemy