В Objective-C вы можете указать обработчик событий для источника отправки как блока или функции. От компании Apple Concurrency Programming Guide:Обработчик события функции GCD для DispatchSource в Swift 3?
функции-обработчики событий принимают один указатель на контекст, содержащий объект источника отправки, и не возвращают никакого значения. Обработчики событий на основе блоков не принимают параметров и не имеют значения .
В Swift 3, возможно ли использовать функцию в качестве обработчика событий? Я только вижу, как использовать блок. Мне нужен доступ к источнику в моем обработчике, и мне нужно определить мой обработчик отдельно от источника.
Вы используете обработчик событий блока, но вы его написали, чтобы захватить источник? Это правильно? Не могли бы вы также сделать что-то вроде: 'let foo: (DispatchSourceRead) -> Void = {источник в печати (" hi \ (source) ")}', а затем 'source.setEventHandler {foo (source)}'? Другими словами, зачем вам «класс Foo»? – sam
Вам не нужен класс. Это была моя первая мысль о том, почему вы нуждались в ней, определенную от источника. Чтобы предотвратить захват, вы можете добавить список захвата в обработчик событий, который использует слабую ссылку на источник. –