【问题标题】:Method with multiple input parameters具有多个输入参数的方法
【发布时间】:2011-09-29 05:09:39
【问题描述】:

我了解如何在 Objective-c 中创建自己的接受输入参数的方法,但我从未真正创建过具有多个输入参数的方法!

从我使用的多个输入参数的方法中,每个参数都有一个类似于

的名称

第一:第二:第三:

看起来像

- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;

我的问题是,当您使用多个输入参数创建自己的方法时,您是否必须创建一个名称,例如 first:second:third后面是参数名称……如果我没记错的话。

fullName:(NSString, NSString, NSString) fname, mname, lname;

【问题讨论】:

    标签: objective-c ios methods


    【解决方案1】:

    另一个选项可能是可变参数。它们用于提供可变数量的参数,即使您不会在每个参数上都有名称。例如

    [NSString stringWithFormat:@"My name is %@ %@", @"John", @"Doe"];
    

    应该是这样的:

    - (void)names:(NSString *)names, ...;
    

    Implementation, additional info

    【讨论】:

      【解决方案2】:

      这是一个带参数的方法的简单示例。

      - (void)methodName:(NSString *)parameterOne methodNameContinues:(NSString *)parameterTwo;
      

      例如,

      -(void)showAlertMsg:(NSString *)message withTitle:(NSString *)title;
      

      您可以看到,我们为第二个参数添加了前缀“withTitle”。我们也必须对其他参数进行相同的处理。

      【讨论】:

        【解决方案3】:

        没有。方法必须具有您描述的格式:

        - (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;
        

        【讨论】:

        • 不正确,不必这样做,请看下面的答案! @PengOne
        • @fuzzybee 实际上,这是完全正确的。您可能有一个空字符串作为名称,例如"" 而不是 "second",但每个名称后必须有冒号。
        • 好的,现在明白了。然而,如果你没有让自己更清楚,人们可能会感到困惑。这可能是你的答案没有被接受的原因,只是我的 2 美分
        • 谢谢你,非常有帮助@PengOne :)
        • 我如何在视图加载时调用该方法?并赋值
        【解决方案4】:

        我可以想到一个使用 NSDictionary 传递参数的完美理由。我也相信它回答了这个问题。

        您可以将所有项目放在一个 NSDictionary 中,然后解压缩它们。如果您说要向其发送参数列表的 persistanceStore NSObject,这可能很有用。

        【讨论】:

        • -1 没有解决 OP 关于 Objective-C 语言语法的问题。
        【解决方案5】:
        fullName:(NSString, NSString, NSString) fname, mname, lname;
        

        是的,你可以这样做。它看起来像这样:

        -(void)fullName:(NSString*)fname :(NSString*)mname :(NSString*)lname
        

        你会这样称呼它:

        [foo fullName:first :middle :last];
        

        不过,这在很大程度上违背了 Objective-C 的方法名称的意义,而这样做的主要原因是表明你不喜欢正常的 Objective-C 约定,或者可能是为了让自己开始你的任何项目'正在努力。

        【讨论】:

          【解决方案6】:

          您必须将参数与方法签名交错。没关系,因为 xcode 具有代码完成功能,它可以为您提供关于您的方法正在做什么以及它需要什么的漂亮描述性名称。

          例如

          - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
          

          在上面的示例中,甚至无需查看 UIViewController 的 API,您就可以很好地了解此方法的工作原理以及它的参数是什么。为您的方法命名以描述它们的作用是一种很好的做法(如果做得好,它可以消除对大多数评论的需要)。

          你当然会看到这样写的方法

          - (void)myMethodThatAcceptsARectangle:(float)x :(float)y :(float)w :(float)h;
          

          但这在使用中不会很清楚参数与什么有关:

          [self myMethodThatAcceptsARectangle:1.0f :1.0f :1.0f :1.0f];
          

          所以你应该避免这种情况(我添加它以防你看到这个并想知道发生了什么)。

          【讨论】:

            猜你喜欢
            • 2013-06-18
            • 1970-01-01
            • 1970-01-01
            • 2014-02-07
            • 1970-01-01
            • 2017-10-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多