方法有2个返回值

use*_*507 1 iphone objective-c

我想调用一个返回两个值的方法

基本上可以说我的方法如下(想要返回2个值)

NSString* myfunc
{
   NSString *myString = @"MYDATA";
   NSString *myString2 = @"MYDATA2";
   return myString;
   return myString2;        
}
Run Code Online (Sandbox Code Playgroud)

所以,当我打电话给它时,我会用?

NSString* Value1 = [self myfunc:mystring];
NSString* Value2 = [self myfunc:mystring2];
Run Code Online (Sandbox Code Playgroud)

我想我做错了什么,有人可以帮帮我吗?谢谢

pro*_*rmr 7

您只能返回1个值.该值可以是结构或对象或简单类型.如果返回结构或对象,则它可以包含多个值.

返回多个值的另一种方法是使用out参数.在C中通过引用或指针传递

这是一个代码片段,显示如何返回包含两个NSStrings的结构:

typedef struct {
    NSString* str1;
    NSString* str2;
} TwoStrings;

TwoStrings myfunc(void) {
    TwoStrings result;
    result.str1 = @"data";
    result.str2 = @"more";
    return result;
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

TwoStrings twoStrs = myfunc();
NSLog(@"str1 = %@, str2 = %@", twoStrs.str1, twoStrs.str2);
Run Code Online (Sandbox Code Playgroud)

返回指针时,即使它们包含在结构中,也需要小心内存管理.在Objective-C中,约定是函数返回自动释放的对象(除非方法名称以create/new/alloc/copy开头).


Gra*_*aul 5

你有几个选择:

  • NSArray:只返回一个数组.很简单.
  • 指针:传递两个指针,写入它们而不是返回任何东西.一定要检查NULL!
  • 结构:创建一个包含两个字段的结构,每个字段对应一个要返回的内容,并返回该结构中的一个.
  • 对象:相同的结构,但创建一个完整的NSObject子类.
  • NSDictionary:与NSArray类似,但不需要使用值的魔术排序.