首页 > 解决方案 > 如何将 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

标签: swift

解决方案


这个

let str : NSString = ""
let pointer = UnsafeMutablePointer(mutating: str.utf8String)

已经是未定义的行为:您正在创建一个可变指针,它引用与 (immutable) 相同的内存str.utf8String

实际上它要简单得多:您可以将可选的地址NSString作为 inout 参数传递给&.

var param: NSString?
let result = YourObjCClass.funcName(&param)

编译器会自动进行必要的转换。很少需要AutoreleasingUnsafeMutablePointer显式创建。


推荐阅读