当您设置 eventMask 以捕获所有 FileSystemEvents 时,如下面的代码所示。您如何能够检索哪个事件触发了该方法?
self.source = DispatchSource.makeFileSystemObjectSource(fileDescriptor: descriptor, eventMask: .all, queue: DispatchQueue.main)
guard let source = self.source else {
return
}
source.setCancelHandler {
if let descriptor = self.descriptor {
close(descriptor)
self.descriptor = nil
}
}
source.setEventHandler { [weak self] in
// How to know which FileSystemEvent triggered this method?
}
source.resume()
最佳答案
看起来 source保存最后一个文件系统事件。
source.setEventHandler { [weak self] in
print(source.data)
}
我还创建了一个小助手:
extension DispatchSourceFileSystemObject {
var dataStrings: [String] {
var s = [String]()
if data.contains(.all) { s.append("all") }
if data.contains(.attrib) { s.append("attrib") }
if data.contains(.delete) { s.append("delete") }
if data.contains(.extend) { s.append("extend") }
if data.contains(.funlock) { s.append("funlock") }
if data.contains(.link) { s.append("link") }
if data.contains(.rename) { s.append("rename") }
if data.contains(.revoke) { s.append("revoke") }
if data.contains(.write) { s.append("write") }
return s
}
}
现在,如果您将代码更改为:
source.setEventHandler { [weak self] in
print(source.dataStrings) // Will output all flags in readable format.
}
关于swift - 如何从DispatchSource中知道哪个FileSystemEvent触发了setEventHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62516458/