कोर मिडी एक सी एपीआई है जो क्षमताओं को कहीं और नहीं मिलती है।स्विफ्ट में "डाउनकास्टिंग" सी स्ट्रक्चर
जब उपयोगकर्ता का MIDI सेटअप बदलता है (उदा। आप किसी डिवाइस में प्लग इन होते हैं), तो एक सूचना होती है।
यह फ़ंक्शन का प्रकार है जिसे कहा जाता है।
func MyMIDINotifyProc (np:UnsafePointer<MIDINotification>, refCon:UnsafeMutablePointer<Void>) {
var notification = np.memory
switch (notification.messageID) {
case MIDINotificationMessageID(kMIDIMsgObjectAdded):
// In Objective-C you would just do a cast here
// This is the problem line
var m = np.memory as MIDIObjectAddRemoveNotification
आप MessageId सदस्य को देखने को देखने के लिए होगा:
struct MIDINotification {
var messageID: MIDINotificationMessageID
var messageSize: UInt32
}
आप इस तरह कॉलबैक लागू हो सकता है:
typealias MIDINotifyProc = CFunctionPointer<((UnsafePointer<MIDINotification>, UnsafeMutablePointer<Void>) -> Void)>
पहले पैरामीटर एक MIDINotification struct जो इस तरह दिखता है आपको किस तरह की अधिसूचना मिली है। कई हैं (मैं सिर्फ एक दिखा रहा हूं)। अधिसूचना के प्रत्येक प्रकार के लिए, आप में पारित एक अलग struct मिल जाएगा इस struct जब एक डिवाइस जोड़ा या हटा दिया गया है आप प्राप्त है:।
struct MIDIObjectAddRemoveNotification {
var messageID: MIDINotificationMessageID
var messageSize: UInt32
var parent: MIDIObjectRef
var parentType: MIDIObjectType
var child: MIDIObjectRef
var childType: MIDIObjectType
}
जैसा कि आप देख, इस struct अतिरिक्त जानकारी है। उदाहरण के लिए "बच्चा" डिवाइस के लिए अंत बिंदु हो सकता है, इसलिए आपको इन फ़ील्ड की आवश्यकता है।
समस्या MIDINbjectAddRemoveNotification को MIDINOTification संरचना (कॉलबैक हस्ताक्षर द्वारा आवश्यक) से कास्टिंग कर रही है। जिस पंक्ति को मैंने "as" का उपयोग करके दिखाया है वह काम नहीं करता है।
क्या आपके पास इस तरह के "डाउनकास्टिंग" के लिए कोई सुझाव है?
अपडेट: ठीक है, यह थोड़ी देर के लिए काम करता है। अब यह स्विफ्ट 2.0 बीटा में टूटा हुआ है। –