【问题标题】:Calling a method by using variables in the method name? [duplicate]通过在方法名称中使用变量来调用方法? [复制]
【发布时间】:2013-06-13 14:21:19
【问题描述】:

我在 Objective-c 中遇到了一种情况,专门用于 iOS 应用程序开发,一个特定的方法将执行并返回一个从 01 到 20 的数字。另外,我有 20 种不同的方法,名称为 m01、m02、m03 等.

如何编写我的代码,以便我的第一个方法调用与第一个方法返回的数字对应的另一个方法?

类似这样的:

[self m[NSStringWithFormat=@"%i", myOutputFromMethod1];

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: ios objective-c methods


    【解决方案1】:

    您可以使用NSSelectorFromString([NSString stringWithFormat:@"m%i", myOutputFromMethod1]) 获取选择器的名称,然后使用[self performSelector:] 执行它。

    【讨论】:

    • 太好了,我试试看。谢谢!
    • 请注意,方法必须返回一个objective-c对象(即NSNumber而不是int
    • 哦,感谢您指出这一点!
    • 查看我的更新答案,您只需在问题中插入您想要创建的内容。
    • 太棒了!有点跑题了,而不是 [self 方法],我如何从另一个 .h/.m 文件中调用方法?我需要导入一些东西吗?
    【解决方案2】:
    SEL s = NSSelectorFromString([NSString NSStringWithFormat:@"m%i", myOutputFromMethod1]);
    [anObject performSelector:s];
    

    【讨论】:

      【解决方案3】:

      根据返回值使用几十种方法绝对不是一个好的编程习惯,(除非你有一些我不知道的非常特殊的要求)。 您可以调用相同的方法,但将参数传递给它。该参数可以放入 switch 语句中,然后您可以为每个参数值编写一个“案例”。例如

      -(void) method_m :(int)mNum
      {
          switch(mNum)
          {
              case 0:
                  //your code for method 00
                  break;
              case 1:
                  //your code for method 01
                  break;
              default:
                  break;
          }
      }
      

      希望对你有帮助。

      【讨论】:

        【解决方案4】:
        SEL s = NSSelectorFromString([NSString NSStringWithFormat: @"m%i", myOutputFromMethod1]);
        
        if ([anObject respondsToSelector: s])
        {
            [anObject performSelector: s];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-06
          • 1970-01-01
          • 2016-08-27
          • 2022-01-11
          • 1970-01-01
          • 2019-08-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多