传出参数

19

我写了一个带有out参数的方法:

-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(out)messageCondent
{   
    messageCondent = [receivedMessage substringFromIndex:2];
    return [receivedMessage substringToIndex:1];
}

然后我这样传递参数:

NSString *messageCondent;
NSString *mode = [myclassobject messageDecryption:message outParam:messageCondent];

然而,有一个问题。输出参数的值没有被正确地设置。有人能帮我正确地解决这个问题吗?


你应该指定一个类型吗?outParam:(out NSString *)? - peterp
1
我从未真正见过使用 out 方法的情况。我认为大多数人只是通过引用实现值。(在此页面上检查正确答案:https://discussions.apple.com/thread/1502936?threadID=1502936) - peterp
2
请注意Cocoa/iOS中按引用传递参数主要限于NSError**。如果您需要同时返回多个值,则需要使用结构体或更常见的类。 - albertamg
1
“out”是Objective-C中与分布式对象相关的关键字。它现在已经不太常用了。 - bbum
2个回答

28
创建一个接受对象指针的方法。
-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(NSString**)messageCondent
{   
    *messageCondent = [receivedMessage substringFromIndex:2];
    return [receivedMessage substringToIndex:1];

}

传入对本地对象的引用。

NSString *messageCondent = nil;
NSString *mode = [myclassobject messageDecryption:message outParam:&messageCondent];

为参数指定显式类型。 - jscs
请注意,在Objective-C中使用out参数非常罕见,几乎只限于NSError ** - bbum
1
没有传出参数有什么主要问题吗? - Vipin

11

“out参数”按定义是指向指针的指针。

你的方法应该像这样:

-(NSString *)messageDecryption:(NSString *)receivedMessage outParam:(NSString **)messageCondent
{   
    *messageCondent = [receivedMessage substringFromIndex:2];
    return [receivedMessage substringToIndex:1];
}

这段代码解除了传入指针的引用,以获取实际的对象引用,然后将其分配给 [receivedMessage substringFromIndex:2] 返回的任何内容。

调用此方法非常简单:

NSString *messageCondent = nil;
NSString *mode = [myclassobject messageDecryption:message outParam:&messageCondent];

不,"out参数"是指向的指针。如果该值是一个对象,则该值是指针的事实仅适用于该情况。但它也可以是一个int - Thomas Tempelmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接