代码之家  ›  专栏  ›  技术社区  ›  xaddict

函数使用后如何在cocoa中声明函数?

  •  3
  • xaddict  · 技术社区  · 15 年前

    我正在缓慢地将应用程序构建到工作状态。

    我使用两个函数 setCollection addToCollection . 这些功能都接受 NSArray 作为输入。

    我还有一个函数叫做 add 其中我使用这两个函数。当我尝试编译时,xcode显示一个错误:

    未声明的“setcollection”(首次在此函数中使用)

    我想这与在活动函数下面定义的被调用函数有关。另一种猜测是,函数应该全球化,以便在我的 添加 功能。

    我通常是一个PHP编码人员。PHP处理这一问题的方式是第一种。调用的函数应该在使用它们的函数之前,否则它们就不存在了。是否有一种方法可以使函数在运行时仍然可用,或者我应该重新排列所有函数以使它们正常工作?

    2 回复  |  直到 13 年前
        1
  •  5
  •   mouviciel    15 年前

    如果您的函数是全局的(不是类的一部分),那么您只需将声明放在使用之前,就像EJames建议的那样。

    如果函数实际上是方法(类的一部分),则必须在实现之前声明类的匿名类别,并将方法声明放在此接口中:

    @interface Myclass()
    - (void) setCollection:(NSArray*)array;
    - (void) addToCollection:(NSArray*)array;
    @end
    
    @implementation Myclass
    
    // Code that calls setCollection or addToCollection
    
    - (void) setCollection:(NSArray*)array
    {
        // your code here
    }
    
    - (void) addToCollection:(NSArray*)array
    {
        // your code here
    }
    
    @end
    

    这样,您就不需要在 MyClass .

        2
  •  8
  •   logancautrell    13 年前

    您可以提前声明函数,如下所示:

    void setCollection(NSArray * array);
    void addToCollection(NSArray * array);
    
    //...
    
    // code that calls setCollection or addToCollection
    
    //...
    
    void setCollection(NSArray * array)
    {
        // your code here
    }
    
    void addToCollection(NSArray * array)
    {
        // your code here
    }
    

    如果您正在创建自定义类,并且这些是成员函数(通常在Objective-C中称为方法),那么您将在类头中声明这些方法,并在类源文件中定义它们:

    //MyClass.h:
    @interface MyClass : NSObject
    {
    
    }
    
    - (void)setCollection:(NSArray *)array;
    - (void)addToCollection:(NSArray *)array;
    
    @end
    


    //MyClass.m:
    
    #import "MyClass.h"
    
    @implementation MyClass
    
    - (void)setCollection:(NSArray *)array
    {
        // your code here
    }
    
    - (void)addToCollection:(NSArray *)array
    {
        // your code here
    }
    
    @end
    


    //some other source file
    
    #import "MyClass.h"
    
    //...
    
    MyClass * collection = [[MyClass alloc] init];
    [collection setCollection:someArray];
    [collection addToCollection:someArray];
    
    //...