Ios Swift 2无法调用';FSEventStreamCreate';具有类型为的参数列表
使用Swift 2和Xcode 7 beta 2(构建:7A121l),我使用FSEventStream API和@convention(c)得到了这个编译错误 任何建议都会很棒,谢谢Ios Swift 2无法调用';FSEventStreamCreate';具有类型为的参数列表,ios,xcode,macos,swift,swift2,Ios,Xcode,Macos,Swift,Swift2,使用Swift 2和Xcode 7 beta 2(构建:7A121l),我使用FSEventStream API和@convention(c)得到了这个编译错误 任何建议都会很棒,谢谢 internal class FileSystem { init () { let allocator: CFAllocator? = kCFAllocatorDefault // Create FSEventStream and return valid FSEventStreamRef
internal class FileSystem {
init () {
let allocator: CFAllocator? = kCFAllocatorDefault
// Create FSEventStream and return valid FSEventStreamRef
// Alias FSEventStreamCallback - CFunction
typealias FSEventStreamCallback = @convention(c) (ConstFSEventStreamRef, UnsafeMutablePointer<Void>, UInt, UnsafeMutablePointer<Void>, 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() + "/Dir"]
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(), kCFRunLoopDefaultMode)
FSEventStreamStart(eventStream)
}
}
内部类文件系统{
init(){
let分配器:CFAllocator?=kCFAllocatorDefault
//创建FSEventStream并返回有效的FSEventStreamRef
//别名FSEventStreamCallback-cffunction
typealias FSEventStreamCallback=@convention(c)(ConstFSEventStreamRef,unsafeutablepointer,UInt,unsafeutablepointer,UnsafePointer,UnsafePointer)->Void
let回调:FSEventStreamCallback={
(streamRef、clientCallBackInfo、numEvents、eventpath、eventFlags、eventid)->Void in
打印(“更改”)
//处理文件事件
}
let上下文:UnsafeMutablePointer=nil
让pathsToWatch:CFArray=[NSHomeDirectory()+“/Dir”]
让我们从以下时间开始:fseventstreamventid=UInt64(kfseventstreamventidsincenow)
let延迟:CFTimeInterval=1.0
let flags:FSEventStreamCreateFlags=UInt32(kFSEventStreamCreateFlagNone)
让eventStream=FSEventStreamCreate(
分配器,
回拨,
上下文
pathsToWatch,
从那时起,
延迟
旗帜
)
FSEventStreamScheduleWithRunLoop(eventStream,CFRunLoopGetCurrent(),kCFRunLoopDefaultMode)
FSEventStreamStart(eventStream)
}
}
您使用了错误的签名(UInt not Int):
typealias FSEventStreamCallback=@convention(c)(ConstFSEventStreamRef,UnsafeMutablePointer,Int,unsafetablepointer,UnsafePointer,UnsafePointer)->Void
这很好:
init () {
let allocator: CFAllocator? = kCFAllocatorDefault
// Create FSEventStream and return valid FSEventStreamRef
// Alias FSEventStreamCallback - CFunction
typealias FSEventStreamCallback = @convention(c) (ConstFSEventStreamRef, UnsafeMutablePointer<Void>, Int, UnsafeMutablePointer<Void>, 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() + "/Dir"]
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(), kCFRunLoopDefaultMode)
FSEventStreamStart(eventStream)
}
init(){
let分配器:CFAllocator?=kCFAllocatorDefault
//创建FSEventStream并返回有效的FSEventStreamRef
//别名FSEventStreamCallback-cffunction
typealias FSEventStreamCallback=@convention(c)(ConstFSEventStreamRef,unsafeutablepointer,Int,unsafeutablepointer,UnsafePointer,UnsafePointer)->Void
let回调:FSEventStreamCallback={
(streamRef、clientCallBackInfo、numEvents、eventpath、eventFlags、eventid)->Void in
打印(“更改”)
//处理文件事件
}
let上下文:UnsafeMutablePointer=nil
让pathsToWatch:CFArray=[NSHomeDirectory()+“/Dir”]
让我们从以下时间开始:fseventstreamventid=UInt64(kfseventstreamventidsincenow)
let延迟:CFTimeInterval=1.0
let flags:FSEventStreamCreateFlags=UInt32(kFSEventStreamCreateFlagNone)
让eventStream=FSEventStreamCreate(
分配器,
回拨,
上下文
pathsToWatch,
从那时起,
延迟
旗帜
)
FSEventStreamScheduleWithRunLoop(eventStream,CFRunLoopGetCurrent(),kCFRunLoopDefaultMode)
FSEventStreamStart(eventStream)
}
不客气。我发现来自Swift编译器的一些错误消息是神秘的。帮助我的是将组合语句分解成更小的块,手动复制语法分析器和代码生成器在事情成熟时应该更好地告诉您的内容。
init () {
let allocator: CFAllocator? = kCFAllocatorDefault
// Create FSEventStream and return valid FSEventStreamRef
// Alias FSEventStreamCallback - CFunction
typealias FSEventStreamCallback = @convention(c) (ConstFSEventStreamRef, UnsafeMutablePointer<Void>, Int, UnsafeMutablePointer<Void>, 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() + "/Dir"]
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(), kCFRunLoopDefaultMode)
FSEventStreamStart(eventStream)
}