我有一个映射到Swift的C函数定义为:
func swe_set_eph_path(path: UnsafeMutablePointer<Int8>) -> Void
我正在尝试传递函数的路径并尝试过:
var path = [Int8](count: 1024, repeatedValue: 0); for i in 0...NSBundle.mainBundle().bundlePath.lengthOfBytesUsingEncoding(NSUTF16StringEncoding)-1 { var range = i..<i+1 path[i] = String.toInt(NSBundle.mainBundle().bundlePath[range]) } println("\(path)") swe_set_ephe_path(&path)
但是在path [i]上我得到了错误:
‘下标’不可用:不能下标Int范围的字符串
swe_set_ephe_path(NSBundle.mainBundle().bundlePath)
也不
swe_set_ephe_path(&NSBundle.mainBundle().bundlePath)
也不管用
除了无法正常工作外,我认为还必须有一种更好,更轻松的方法来做到这一点。以前使用CString在StackOverflow上的答案似乎不再起作用。有什么建议?
使用CString在StackOverflow上的先前答案似乎不再起作用
尽管如此,UnsafePointer<Int8>还是一个C字符串。如果您的上下文绝对需要一个UnsafeMutablePointer,请强制执行,如下所示:
UnsafePointer<Int8>
UnsafeMutablePointer
let s = NSBundle.mainBundle().bundlePath let cs = (s as NSString).UTF8String var buffer = UnsafeMutablePointer<Int8>(cs) swe_set_ephe_path(buffer)
当然,我没有您的swe_set_ephe_path,但是在进行如下测试时,它在我的测试中效果很好:
swe_set_ephe_path
func swe_set_ephe_path(path: UnsafeMutablePointer<Int8>) { println(String.fromCString(path)) }