Protocolswift 6.0.1Swift
CVarArg
A type whose instances can be encoded, and appropriately passed, as elements of a C va_list
.
protocol CVarArg
You use this protocol to present a native Swift interface to a C “varargs” API. For example, a program can import a C API like the one defined here:
int c_api(int, va_list arguments)
To create a wrapper for the c_api
function, write a function that takes CVarArg
arguments, and then call the imported C function using the withVaList(_:_:)
function:
func swiftAPI(_ x: Int, arguments: CVarArg...) -> Int {
return withVaList(arguments) { c_api(x, $0) }
}
Swift only imports C variadic functions that use a va_list
for their arguments. C functions that use the ...
syntax for variadic arguments are not imported, and therefore can’t be called using CVarArg
arguments.
If you need to pass an optional pointer as a CVarArg
argument, use the Int(bitPattern:)
initializer to interpret the optional pointer as an Int
value, which has the same C variadic calling conventions as a pointer on all supported platforms.