swift - 如何将 NSString 转换为 AutoreleasingUnsafeMutablePointer
问题描述
我正在做一个 swift 和 Objective-c 的混合项目。我需要使用这样的功能。
+ (nullable NSString *)funcName:(NSString **)param;
很快,参数就变成了AutoreleasingUnsafeMutablePointer
类型。
试过这样的代码
let str : NSString = ""
let pointer = UnsafeMutablePointer(mutating: str.utf8String)
let unsafe = AutoreleasingUnsafeMutablePointer<NSString?>.init(pointer)
let str = funcName(str.utf8String)
但这会导致崩溃,因为我发送的指针指向 nil
解决方案
这个
let str : NSString = ""
let pointer = UnsafeMutablePointer(mutating: str.utf8String)
已经是未定义的行为:您正在创建一个可变指针,它引用与 (immutable) 相同的内存str.utf8String
。
实际上它要简单得多:您可以将可选的地址NSString
作为 inout 参数传递给&
.
var param: NSString?
let result = YourObjCClass.funcName(¶m)
编译器会自动进行必要的转换。很少需要AutoreleasingUnsafeMutablePointer
显式创建。
推荐阅读
- openmaptiles - 如何确保使用 Open Map Tiles 以所有缩放级别渲染所有切片
- google-sheets - 有什么方法可以获取结果的地址吗?
- c - 捆绑 Malloc 调用
- mysql - 针对用户和前 25 条建议的数据库设计
- php - 如何限制数组中的数组
- python - 从 Python 中的打印输出中删除用户输入
- java - 如何加密 InputStream 中的 Excel 并写入 OutputStream?
- java - Java str.replaceAll() 不将 \R 识别为字符类的一部分
- javascript - javascript:如何在特定时间后停止调用函数
- python - 如何让船在拍摄时不停止?