C函数
int initialize(int argc, char **argv);
被映射为Swift
func initialize(argc: Int32, argv: UnsafeMutablePointer<UnsafeMutablePointer<Int8>>) -> Int32
这是一个可能的解决方案:
let args = ["-c", "1.2.3.4", "-p", "8000"]// Create [UnsafeMutablePointer<Int8>]:var cargs = args.map { strdup($0) }// Call C function:let result = initialize(Int32(args.count), &cargs)// Free the duplicated strings:for ptr in cargs { free(ptr) }它使用这样的事实:在
strdup($0)Swift字符串中
$0会自动将其转换为C字符串,如UnsafePointer
<UInt8>函数参数行为的字符串值中所述



