Core MIDI ist eine C-API, die Fähigkeiten bietet, die anderswo nicht zu finden sind.
Wenn sich das MIDI-Setup des Benutzers ändert (z. B. wenn Sie ein Gerät eingesteckt haben), wird eine Benachrichtigung angezeigt.
Dies ist der Typ der aufgerufenen Funktion.
%Vor%Der erste Parameter ist eine MIDINotification-Struktur, die wie folgt aussieht:
%Vor%Sie können den Rückruf wie folgt implementieren:
%Vor%Sie würden sich das Mitglied von messageID ansehen, um zu sehen, welche Art von Benachrichtigung Sie gerade erhalten haben. Es gibt mehrere (ich zeige nur einen). Für jede Art von Benachrichtigung erhalten Sie eine andere Struktur, die übergeben wird. Dies ist die Struktur, die Sie erhalten, wenn ein Gerät hinzugefügt oder entfernt wurde:
%Vor%Wie Sie sehen, hat diese Struktur zusätzliche Informationen. Das "Kind" könnte beispielsweise ein Endpunkt für ein Gerät sein, daher benötigen Sie diese Felder.
Das Problem besteht darin, von der MIDINotification-Struktur (die von der Callback-Signatur benötigt wird) in MIDIObjectAddRemoveNotification umzuschalten. Die Zeile, die ich mit "as" gezeigt habe, funktioniert nicht.
Haben Sie irgendwelche Vorschläge für diese Art von "downcasting"?
Als Vatsal Manot vorgeschlagen , da MIDINotification
und MIDIObjectAddRemoveNotification
nicht durch eine Vererbung oder einen Vertrag verbunden sind, Swift kann kein sicheres Casting zwischen diesen Strukturen durchführen.
Sie müssen es explizit mit unsafeBitCast
function:
Beachten Sie, dass diese Funktion in Swift immer zum Ausführen von Umwandlungen verwendet werden kann, aber es ist extrem unsicher und Sie sollten es nur als letzte mögliche Lösung verwenden.
Ich schlage vor, dass Sie sich die Standardbibliotheksfunktion unsafeBitCast
ansehen.