2
這是在Swift 3.1中工作的,但是一旦我切換到Xcode 9,它就停止編譯。下面是一個示例代碼:Swift 3.2 - 編譯器不讓我使用Darwin.kevent全局函數
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
結構initalizer看起來像這樣
public init(ident: UInt, filter: Int16, flags: UInt16, fflags: UInt32, data: Int, udata: UnsafeMutableRawPointer!)
我甚至試過宣佈所有參數作爲本地變量(如示例代碼),以確保沒有類型推斷,這將使該功能調用不正確,這可能會導致編譯器認爲我想使用該結構。沒有運氣。
有沒有人知道這個「超載」問題的解決方案?
沒有達爾文前綴的'kevent(kq,changelist,nchanges,eventlist,nevents,timeout)'沒有爲我編譯沒有問題。 –
@MartinR哇,不能相信解決方案是那麼簡單:)。你應該發佈一個答案。 – Cristik