Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用**void参数从swift访问目标c函数_Objective C_Swift - Fatal编程技术网

Objective c 使用**void参数从swift访问目标c函数

Objective c 使用**void参数从swift访问目标c函数,objective-c,swift,Objective C,Swift,这主要是一个“学术”问题,所以请不要问“你为什么需要这样做”:-) 我有这个objective c方法,我没有使用ARC(我知道如果我不释放分配的字符串,它会泄漏)。 此方法获取指向内存中某个内容的指针,然后将指向的内容更改为NSMutableString +(void) writeString:(void **)var { NSMutableString *aString = [[NSMutableString alloc] initWithFormat:@"pippo %@", @"

这主要是一个“学术”问题,所以请不要问“你为什么需要这样做”:-)

我有这个objective c方法,我没有使用ARC(我知道如果我不释放分配的字符串,它会泄漏)。 此方法获取指向内存中某个内容的指针,然后将指向的内容更改为NSMutableString

+(void) writeString:(void **)var
{
    NSMutableString *aString = [[NSMutableString alloc] initWithFormat:@"pippo %@", @"pluto"];
    *var = aString;
}
从目标C中,我以这种方式访问它,并且它工作正常

NSString *str;
[FLSwiftUtils writeString:&str];
NSLog(@"%@", str);  // prints pippo pluto
现在我想以同样的方式从Swift访问它,但是我在指针方面有问题。 我试着这样做:

    var opaque = COpaquePointer.null()   // create a new opaque pointer pointing to null
    FLSwiftUtils.writeString(&opaque)
    println(opaque)
但是它打印VSs14COpaquePointer(有一个子对象),因为
不透明
是一个指针,我不知道如何遵从它并访问指向的NSMutableString

如果尝试从不透明值开始创建非安全指针:

    var str = UnsafePointer<NSMutableString>(opaque)
    println(str)
var str=UnsafePointer(不透明)
println(str)
println打印一个空行

我甚至试过:

    var secondStr = AutoreleasingUnsafePointer<NSMutableString>(opaque.value)
    println(secondStr)
    println(secondStr.memory)
var secondStr=AutoreleasingUnsafePointer(不透明的.value)
println(secondStr)
println(第二个str.内存)
但它会打印出来

VSs26AutoreleasingUnsafePointer(有1个子项) __NSCFString


我想我已经接近解决方案了,但我肯定我做错了什么

我在苹果论坛上收到了答案(注:此代码用于ARC)

然后将其释放到Swift中,如下所示:

    var opaque = COpaquePointer.null()   // create a new opaque pointer pointing to null
    TestClass.writeString(&opaque)

    var string = Unmanaged<NSString>.fromOpaque(opaque).takeRetainedValue()  // this function: creates an object, from the opaque pointer "opaque", take it's value and balance it with a release
    println(string)
var opaque=COpaquePointer.null()//创建一个指向null的新不透明指针
TestClass.writeString(&不透明)
var string=Unmanaged.fromovaque(不透明).takeRetainedValue()//此函数:从不透明指针“不透明”创建一个对象,获取它的值并用释放来平衡它
println(字符串)

这可能对您有用:它没有帮助……我使用的是void**,而不是void*:-/
    var opaque = COpaquePointer.null()   // create a new opaque pointer pointing to null
    TestClass.writeString(&opaque)

    var string = Unmanaged<NSString>.fromOpaque(opaque).takeRetainedValue()  // this function: creates an object, from the opaque pointer "opaque", take it's value and balance it with a release
    println(string)