【问题标题】:How to access Objective C unnamed parameters of some method?如何访问某些方法的Objective C未命名参数?
【发布时间】:2015-07-28 17:25:21
【问题描述】:

我在网上找到的关于 Objective C 中方法参数的所有信息都是它们是可选的,但是如果我不标记某些方法的每个输入参数,我该如何访问它们?

这是我正在尝试做的一个示例:

 - (float) divNum1: (int) AndNum2: (int);

然后它甚至没有编译,说

之前需要一个标识符;

所以在上面方法的实现上我要访问每个输入参数:

- (float) divNum1: (int) AndNum2: (int)
{
    return <first parameter> / <second parameter>;
}

我知道如何使用标签来解决这个问题,我需要的是这个问题的解决方案,而不用命名每个参数。

【问题讨论】:

  • 那是你不理解Objective-C方法声明语法的问题吗?
  • 可选的部分并不是你认为可选的部分。
  • 感谢所有的答案,现在我明白了我的错误。可选的是方法名称的附加部分,而不是参数名称。

标签: objective-c methods syntax parameters


【解决方案1】:

标签是类型之前的东西。您可以省略它们(第一个除外,因为它是方法的名称)。所以你可以这样声明:

- (float) divNum1: (int) a : (int) b;

并像这样定义它:

- (float) divNum1: (int) a : (int) b {
    return (float)a /(float)b;
}

然后这样称呼它:

[self divNum1:5 :6];

您不能省略类型之后的名称,因为这些是方法体使用的内部名称。

【讨论】:

    【解决方案2】:

    您弄错了方法的哪一部分是可选的。伪参数方法名称是可选的,但所有物理参数都必须存在。请考虑以下方法。

    - (void)parameterOne:(int)p1 :(int)p2
    //                          ^^^
    {
        int p3 = p1 * p2;
    }
    

    这个方法会这样调用。

    [self parameterOne:10 :20];
    

    如你所见,方法name的对应部分是可选的,但参数名称不是。

    【讨论】:

      【解决方案3】:

      交错的参数名称是可选的,而不是参数名称。

      无论如何,这是声明

      - (float)div:(int)num1:(int)num2;
      

      用法

      [self div:2 :3];
      

      实现

      - (float)div:(int)num1:(int)num2 {
          return (float)num1 / num2;
      }
      

      方法本身称为-div::。 (注意两个冒号)

      但是苹果discourages this behaviour

      如果您不喜欢这样,您可以尝试类似 swift 的方法,您可以省略方法的许多部分。

      您应该改用- (float) div:(int)num1 with:(int)num2;

      【讨论】:

      • 要清楚,方法的名称是div::(注意两个冒号——它们是方法名称的一部分)。
      猜你喜欢
      • 1970-01-01
      • 2015-11-14
      • 2010-10-07
      • 2011-07-06
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多