Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
347 views
in Technique[技术] by (71.8m points)

swift - How to convert a NSString to AutoreleasingUnsafeMutablePointer

I am working on a mixed project of swift and objective-c. I need to use a function like this.

+ (nullable NSString *)funcName:(NSString **)param;

In swift,the param becomes AutoreleasingUnsafeMutablePointer type.

Tried code like this

let str : NSString = ""
let pointer = UnsafeMutablePointer(mutating: str.utf8String)
let unsafe = AutoreleasingUnsafeMutablePointer<NSString?>.init(pointer)
let str = funcName(str.utf8String)

But it results in crash because the pointer I sent in is pointing to nil

question from:https://stackoverflow.com/questions/65625708/how-to-convert-a-nsstring-to-autoreleasingunsafemutablepointer

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

This

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

is already undefined behavior: You are creating a mutable pointer referencing the same memory as the (immutable) str.utf8String.

Actually it is much simpler: You can pass the address of an optional NSString as inout argument with &.

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

The compiler automatically does the necessary conversion. There is seldom a need to create an AutoreleasingUnsafeMutablePointer explicitly.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...