【问题标题】:How to declare method (function) with multiples input parameters and out parameters [duplicate]如何声明具有多个输入参数和输出参数的方法(函数)[重复]
【发布时间】:2013-06-18 16:00:41
【问题描述】:

我正在尝试声明一个具有多个输入和输出参数的方法。 我对这样的多个输入参数声明没有任何问题:

     - (float)tCorrection:(float)t2 tCableBase:(float)t1 CableMaterial: (NSString*)CopperOrAl;

在这种情况下,我们有 3 个输入参数(不同类型)和一个浮点返回类型。

我的问题是如何声明一个返回参数超过 1 个的函数。我尝试了不同的语法,但没有运气。

感谢任何帮助。

【问题讨论】:

  • 需要返回哪些值?
  • 你为什么不使用NSDictionaryNSMutableArray
  • 我同意lxt,你需要的是一本字典

标签: ios objective-c function methods


【解决方案1】:

首先,您的方法名称确实不是最理想的。而不是:

     - (float)tCorrection:(float)t2 tCableBase:(float)t1 CableMaterial: (NSString*)CopperOrAl;

我建议如下:

 - (float)applyCorrection:(float)correction toCableBase:(float)cableBase withCableMaterial:(CableMaterial)material;

您将CableMaterial 定义为枚举类型的材料。

接下来,要回答您的问题,您可以按照 duDE 的建议使用 return-by-reference。

但是,不要。闻起来像糟糕的设计。

相反,听起来您确实需要一个类,其实例可以配置各种参数,然后查询以获取计算结果。这将产生更简洁的应用程序设计。

我想像 Cable 类,它具有 materialbasecorrection 等属性,然后是计算各种所需值的各种 readonly 属性。

【讨论】:

  • 感谢 bbum 的评论。它向我展示了另一种方法。
【解决方案2】:

返回多个值的推荐方式是:

  • 包装起来并返回一个结构
  • 包装它并返回一个类
  • 返回字典/数组

通常不应该使用传递引用的方法,而是主要使用 为NSError**

【讨论】:

    【解决方案3】:

    通常没有返回多个值的方法的任何语法,但是如果您有多个值并且想要返回它,那么创建 NSMutableArrayNSMutableDictionary 这对于返回多个值很有用。

    这样的,

    - (NSMutableArray *)tCorrection:(float)t2 tCableBase:(float)t1 CableMaterial: (NSString*)CopperOrAl;
    {
         NSMutableArray *temArray = [[NSMutableArray alloc] init];
         [temArray addObject:[NSString stringWithFormat:@"%f", t2]];
         [temArray addObject:[NSString stringWithFormat:@"%f", t1]];
         [temArray addObject:[NSString stringWithFormat:@"%@", CopperOrAl]];
    
       return temArray;
    }
    

    对于从返回数组中得到的值

    NSMutableArray *returnArray = [self tCorrection:2.5 tCableBase:23.5 CableMaterial:@"MyString"];
    
    NSLog(@"%@", returnArray);
    

    【讨论】:

    • 只有在编译时返回参数的数量或类型未知时,我才会这样做。你会错过编译时类型检查和 Objective-C 的显式风格和语法。有关首选方法,请参阅 duDE 的答案。
    • 确实,这种方法很容易出错,而且您会失去类型安全性、命名参数、清晰度等等。
    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 2015-02-11
    相关资源
    最近更新 更多