在Objective-C中,您可以将调度源的事件处理程序指定为块或函数。来自Apple的Concurrency Programming Guide:
基于函数的事件处理程序采用单个上下文指针, 包含调度源对象,并且不返回任何值。 基于块的事件处理程序不带参数,也没有返回 值。
在Swift 3中,是否仍然可以使用函数作为事件处理程序?我只看到如何使用块。我需要访问我的处理程序中的源代码,我需要与定义源的位置分别定义我的处理程序。
答案 0 :(得分:1)
这个怎么样?
class Foo {
var eventHandler: (DispatchSourceRead) -> Void
init(handler: @escaping (DispatchSourceRead) -> Void) {
eventHandler = handler
}
}
let foo = Foo() { source in
print("got event from source")
}
let source = DispatchSource.makeReadSource(fileDescriptor: 0)
source.setEventHandler {
foo.eventHandler(source)
}