Я нашел пример для IOKit
:
var notification:io_object_t
let matching:NSDictionary = IOServiceNameMatching("IODisplayWrangler").takeRetainedValue()
let displayWrangler = IOServiceGetMatchingService(kIOMasterPortDefault, matching)
let notificationPort = IONotificationPortCreate(kIOMasterPortDefault)
IOServiceAddInterestNotification(notificationPort, displayWrangler, kIOGeneralInterest, displayPowerNotificationsCallback, nil, ¬ification)
CFRunLoopAddSource (CFRunLoopGetCurrent(), IONotificationPortGetRunLoopSource(notificationPort), kCFRunLoopDefaultMode);
IOObjectRelease (displayWrangler);
Приведенный выше пример мне понятен - пока. Но IOServiceAddInteresNotification
хочет функцию обратного вызова. Это легко сделать, реализуя функцию C-Style где-то в .m
-файле.
В документации сказано, что я должен использовать обратный вызов типа IOServiceInterestCallback
.
В C-Style это определяется следующим образом:
typedef void ( *IOServiceInterestCallback)( void *refcon, io_service_t service, uint32_t messageType, void *messageArgument );
А на objC вроде все отлично получается. Каково эквивалентное решение в Swift? Как объявить функцию обратного вызова, не создавая для этого файл C или objC?
Любые идеи?
Ваше здоровье,
Джек