Swift 3中DispatchSource的GCD函数事件处理程序?

时间:2016-09-27 06:10:15

标签: swift grand-central-dispatch

在Objective-C中,您可以将调度源的事件处理程序指定为块或函数。来自Apple的Concurrency Programming Guide

  

基于函数的事件处理程序采用单个上下文指针,   包含调度源对象,并且不返回任何值。   基于块的事件处理程序不带参数,也没有返回   值。

在Swift 3中,是否仍然可以使用函数作为事件处理程序?我只看到如何使用块。我需要访问我的处理程序中的源代码,我需要与定义源的位置分别定义我的处理程序。

1 个答案:

答案 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)
}