这在 Swift 3.1 中有效,但是一旦我切换到 Xcode 9,它就会停止编译。这是一个示例代码:
let kq: Int32 = 0
let changelist: UnsafePointer<kevent>! = nil
let nchanges: Int32 = 0
let eventlist: UnsafeMutablePointer<kevent>! = nil
let nevents: Int32 = 0
let timeout: UnsafePointer<timespec>! = nil
Darwin.kevent(kq, changelist, nchanges, eventlist, nevents, timeout)
错误是
错误:调用中缺少参数标签 'ident:filter:flags:fflags:data:udata:'
问题似乎是由于Darwin
模块同时导出了同名的结构和函数 - kevent
,并且编译器没有选择全局函数而是希望我添加结构初始化器标签,而这并没有为我工作,因为参数列表不匹配。
结构初始化器kevent
看起来像这样
public init(ident: UInt, filter: Int16, flags: UInt16, fflags: UInt32, data: Int, udata: UnsafeMutableRawPointer!)
我什至尝试将所有参数声明为局部变量(如示例代码中所示),以确保没有类型推断会使函数调用不正确,这可能导致编译器认为我想使用该结构。没运气。
有人知道这个“重载”问题的解决方案吗?