比如说,我有一个 C 函数:
const unsigned char *get_text(int idx);
在我的 Swift 代码中,我调用了这个 C 函数:
let idx: CInt = 6
let txt = get_text(idx)
然后我将 txt
放入 NSMutableDictionary
:
var myDict = NSMutableDictionary()
//ERROR: Cannot invoke ‘setValue’ with an argument list of type ’UnsafePointer<UInt8>, forKey: String?)’
myDict.setValue(txt, forKey: “MyText”)
但是我得到上面的编译器错误。那么我怎样才能将值设置到我的字典中呢?
最佳答案
C型const unsigned char *
映射到 Swift 作为
UnsafePointer<UInt8>
.您可以创建一个(可选的)Swift 字符串
从那个指针
let str = String.fromCString(UnsafePointer(txt))
myDict.setValue(str, forKey: "MyText")
这假定从 get_text()
返回的 C 字符串是
UTF-8 编码和 NUL 终止。
UnsafePointer()
转换是必要的,因为 fromCString()
需要 UnsafePointer<CChar>
争论。
如果将 C 函数更改为
const char *get_text(int idx);
然后它简化为
let str = String.fromCString(txt)
备注:在NSMutableDictionary
中设置值的正确方法
是
setObject(_, forKey: _)
Key-Value Coding方法
setValue(_, forKey: _)
在大多数情况下具有相同的效果。参见示例 Where's the difference between setObject:forKey: and setValue:forKey: in NSMutableDictionary? 获取更多信息。
您也可以考虑使用 Swift Dictionary
相反。
关于ios - 将 C 类型值设置为 NSMutableDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32478915/