【发布时间】:2018-02-21 09:44:46
【问题描述】:
我正在尝试使用用 C 编写的库。我在 Xcode 项目中导入了 .a 和 .h 文件,并检查了它是否正常工作。我已经让他们在 Objective-C 上工作,现在在 Swift 上工作。
我遇到的一个问题是函数的参数。有一个函数需要一个参数widechar(在库中定义为typedef Unsigned short int),在Swift 中是UnsafeMutablePointer<UInt16>。该函数对其进行翻译并返回结果。
所以我应该将String 转换为UnsafeMutablePointer<UInt16>。我试图找到转换它的正确方法,但我只将它转换为UnsafeMutablePointer<UInt8>。我找不到有关将 String 转换为 UnsafeMutablePointer<UInt16> 的答案/信息。
这是我写的源代码。
extension String{
var utf8CString: UnsafePointer<Int8> {
return UnsafePointer((self as NSString).utf8String!)
}
}
func translate(toBraille: String, withTable: String) -> [String]? {
let filteredString = toBraille.onlyAlphabet
let table = withTable.utf8CString
var inputLength = CInt(filteredString.count)
var outputLength = CInt(maxBufferSize)
let inputValue = UnsafeMutablePointer<widechar>.allocate(capacity: Int(outputLength))
let outputValue = UnsafeMutablePointer<widechar>.allocate(capacity: Int(outputLength))
lou_translateString(table, inputValue, &inputLength, outputValue, &outputLength, nil, nil, 0)
//This is a function that I should use.
let result:[String] = []
return result
}
【问题讨论】:
-
与您的直接问题无关,但
utf8CString函数不安全,不应该是必需的。您可以将 Swift 字符串直接传递给带有UnsafePointer<Int8>参数的 C 函数:lou_translateString(withTable, ...) -
哦,我不知道。谢谢:0
标签: swift