如何从名称与结构一致的Swift调用C函数?
在C中,函数和结构有单独的名称空间。达尔文模块同时导出如何从名称与结构一致的Swift调用C函数?,c,swift,interop,swift4.2,C,Swift,Interop,Swift4.2,在C中,函数和结构有单独的名称空间。达尔文模块同时导出struct flock和func flock。如果我尝试调用该函数,编译器会将名称解析为结构初始化器: let result: Int32 = Darwin.flock(fd, LOCK_EX) ^^^^^ Cannot invoke initializer for type 'f
struct flock
和func flock
。如果我尝试调用该函数,编译器会将名称解析为结构初始化器:
let result: Int32 = Darwin.flock(fd, LOCK_EX)
^^^^^
Cannot invoke initializer
for type 'flock' with an argument list
of type '(Int32, Int32)'
如果尝试通过命名导入手动解析名称,仍会出现错误:
import func Darwin.flock
^^^^^^^^^^^^
Ambiguous name 'flock' in module 'Darwin'
引用函数时也没有运气:
let functionNotStruct: (Int32, Int32) -> Int32 = Darwin.flock
^^^^^^^^^^^^^^^^^^^^^^^
Cannot convert value of type 'flock.Type'
to specified type '(Int32, Int32) -> Int32'
有没有办法告诉编译器我想要的是函数而不是初始化器?我无法解释为什么会有区别,但省略模块名会使它编译:
// Call `flock()`:
let result = flock(fd, LOCK_EX)
// Use `struct flock`:
var fl = flock()
fl.l_start = 0