gpt4 book ai didi

Swift 3.2 - 编译器不允许我使用 Darwin.kevent 全局函数

转载 作者:可可西里 更新时间:2023-11-01 01:14:49 25 4
gpt4 key购买 nike

这在 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)

错误是

error: missing argument labels 'ident:filter:flags:fflags:data:udata:' in call

问题似乎是由 Darwin 模块同时导出结构和具有相同名称的函数 - kevent 引起的,而编译器没有选择全局函数并希望我添加结构初始化器标签,这对我不起作用,因为参数列表不匹配。

kevent 结构初始化器看起来像这样

public init(ident: UInt, filter: Int16, flags: UInt16, fflags: UInt32, data: Int, udata: UnsafeMutableRawPointer!)

我什至尝试将所有参数声明为局部变量(如示例代码中所示),以确保没有类型推断会使函数调用不正确,这可能导致编译器认为我想使用结构。运气不好。

有人知道这个“重载”问题的解决方案吗?

最佳答案

我不能告诉你为什么完全限定的函数名不能用 Swift 3.2 编译,但是

kevent(kq, changelist, nchanges, eventlist, nevents, timeout)

没有 Darwin 前缀编译没有问题(使用 Xcode 9 GM、Swift 3.2 和 Swift 4 测试)。

我可以确认

Darwin.kevent(kq, changelist, nchanges, eventlist, nevents, timeout)

使用 Swift 3.1 (Xcode 8.3.3) 编译,所以你可能想要提交一个错误报告。

关于Swift 3.2 - 编译器不允许我使用 Darwin.kevent 全局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46292405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com