在Swift 3中,具有签名
问题是,如何将以NULL结尾的C字符串数组映射到Swift字符串数组?
原始的C签名:
const char *f()
的C函数被映射到导入时的UnsafePointer<Int8>! f()
。它的结果可以转换为Swift字符串,如下所示:let swiftString = String(cString: f())
问题是,如何将以NULL结尾的C字符串数组映射到Swift字符串数组?
原始的C签名:
const char **f()
导入的 Swift 签名:
UnsafeMutablePointer<UnsafePointer<Int8>?>! f()
Swift字符串数组:
let stringArray: [String] = ???
String
类型的语言(包括C++)中,需要非常相似的技术。这些“其他”语言中的每一种都为每个字符串值维护单独的“长度”:它们不依赖于终止的空字节。但是,它们都有专门设计用于处理它们的方法。(通常,它们在存储当前值的末尾保留已知的NULL字节。) - Mike RobinsonNULL
。任何未来在f()
中产生此返回值的错误都将演变成一个非常恶心且难以定位的错误,浪费了本应该节省微秒的时间,因此我是一个非常保守的编码人员... - Mike Robinson