在Swift中使用C库获取不安全的指针

时间:2017-03-10 13:40:49

标签: ios c swift compression

我看过其他答案,但对我来说毫无意义。

我正在尝试将此库添加到我的Swift项目中: http://ed-von-schleck.github.io/shoco/

我按照本教程中的第1步和第2步操作: https://medium.com/swift-and-ios-writing/using-a-c-library-inside-a-swift-framework-d041d7b701d9#.r1gi4q3ri

我可以导入shoco模块(yay!)

根据API,这是函数应该是什么:

size_t shoco_compress(const char * in, size_t len, char * out, size_t bufsize);

但是我的Swift项目生成了这个编辑器占位符

shoco_compress(in: UnsafePointer<Int8>!, len: Int, out: UnsafeMutablePointer<Int8>!, bufsize: Int)

有人可以告诉我如何使用这个库压缩Swift中的字符串吗?

第一次使用C时,任何正确方向的推动都会受到赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:2)

你一定要阅读Using Swift with C API。对于您的问题,这是一个完整的压缩 - 解压缩周期的例子:

let str = "Hello world"

let inCStr = str.cString(using: .utf8)!

var compressedStr = [Int8](repeating: 0, count: 128)
let compressedStrLen = shoco_compress(inCStr, inCStr.count - 1, &compressedStr, compressedStr.count - 1)

var decompressedStr = [Int8](repeating: 0, count: 128)
shoco_decompress(compressedStr, compressedStrLen, &decompressedStr, decompressedStr.count - 1)

let str2 = String(cString: decompressedStr)
print(str2) // Hello world