Я пытаюсь просмотреть папку, чтобы увидеть, создан ли файл / изменен / удален и т. Д. В этой папке в Mac OS.Я прочитал, что я хочу использовать События файловой системы, но я не могу заставить мой код работать.
Я попытался прочитать документы на apple и прочитатьна разных постах на stackoverflow, но ничего, что я нашел, похоже не работает на swift 4 и xcode 10.
init(path: String) {
let allocator: CFAllocator? = kCFAllocatorDefault
// Create FSEventStream and return valid FSEventStreamRef
// Alias FSEventStreamCallback - CFunction
typealias FSEventStreamCallback = @convention(c) (ConstFSEventStreamRef, UnsafeMutableRawPointer?, Int, UnsafeMutableRawPointer, UnsafePointer<FSEventStreamEventFlags>, UnsafePointer<FSEventStreamEventId>) -> Void
let callback: FSEventStreamCallback = {
(streamRef, clientCallBackInfo, numEvents, eventPaths, eventFlags, eventIds) -> Void in
print ("changed")
// handle file event
}
let context: UnsafeMutablePointer<FSEventStreamContext>? = nil
let pathsToWatch: CFArray = [NSHomeDirectory() + path] as CFArray
let sinceWhen: FSEventStreamEventId = UInt64(kFSEventStreamEventIdSinceNow)
let latency: CFTimeInterval = 1.0
let flags: FSEventStreamCreateFlags = UInt32(kFSEventStreamCreateFlagNone)
let eventStream = FSEventStreamCreate(
allocator,
callback,
context,
pathsToWatch,
sinceWhen,
latency,
flags
)
FSEventStreamScheduleWithRunLoop(eventStream, CFRunLoopGetCurrent(), CFRunLoopMode.defaultMode as! CFString)
FSEventStreamStart(eventStream!)
}
Я либо получаю ошибку
Value of optional type 'FSEventStreamRef?' (aka 'Optional<OpaquePointer>') must be unwrapped to a value of type 'FSEventStreamRef' (aka 'OpaquePointer')
, когда пытаюсьпостроить или
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
во время выполнения, если я добавлю '!'to "eventStream"
Что мне нужно изменить, чтобы запустить его?