【问题标题】:Objective C Syntax for Methods in Objects对象中方法的 Objective C 语法
【发布时间】:2015-02-02 02:21:49
【问题描述】:

我正在关注教科书中有关对象的一些示例,但不知何故,我完全错过了某种语法风格或规则,我不确定我在这里看到的是什么。

这两种方法是我有点坚持的。我不确定我应该如何从字面意义上阅读它们。

这是一个字符串函数,它接受指向我们称为lastTimeString的字符串对象的指针

-(NSString *)lastTimeString;  

我不确定冒号是干什么用的。这是一个接受指向 NSTimer 对象的指针的方法吗?

   -(void)updateLastTime: (NSTimer *)t;

请帮忙。目前,格式或样式对我来说有点刺耳。

#import <Foundation/Foundation.h>
@interface BNRLogger : NSObject

@property (nonatomic) NSDate *lastTime;
-(NSString *)lastTimeString;
-(void)updateLastTime: (NSTimer *)t;

@end

【问题讨论】:

标签: objective-c xcode object methods


【解决方案1】:

括号中+- 之后的部分是函数的返回类型。即

- (NSString *)iReturnAString;
+ (int)andIReturnAnInt

冒号表示一个输入参数。整个函数语法是这样的

-/+(<return type>)functionNameStarts:(<parameter 1 type>)<parameter 1 name> functionNameContinues:(<parameter 2 type)<parameter 2 name> functionNameEnds:(<parameter 3 type>)<parameter 3 name>;

您可以拥有任意数量的输入参数。 所以对于一个函数

- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated;

函数的名字是

scrollToRowAtIndexPath: atScrollPosition: animated:

它有3个参数,分别是:

NSIndexPath* indexPath, UITableViewScrollPosition scrollPosition, BOOL animated

希望对你有帮助

【讨论】:

    【解决方案2】:

    亮点:

    一个类主要有两个文件,第一个头文件(classname.h)和第二个实现文件(classname.m)。我考虑了您的代码,哪些是头文件。我将通过参考链接向您解释每一行。如果您对此仍有疑问,请告诉我。


    #import <Foundation/Foundation.h> 
    

    导入部分,您应该在此处导入(写为#import)任何框架或类,以在此处访问它们的公共方法、ivars、块或其他属性。在这个例子中,我们自己从 iOS 导入 Foundation 框架(默认添加)。


    @interface BNRLogger : NSObject    
    

    接口部分,在这里你可以写你的类或类别的名称,在这个例子中,我们创建了一个名为 BNRLogger 的自定义类,它派生自 NSObject。 You can read more about NSObject herealso refer document for Class.


    @property (nonatomic) NSDate *lastTime;
    

    属性部分,这里我们编写公共属性,可以通过创建类的对象来访问类外部。根据要求,属性可以是原子/非原子和强/弱/保留/分配/复制/只读/读写。在这个例子中,我们添加了变量名为 lastTime 的 NSDate(因为它应该是一个写成 *lastTime 的指针)。你可以阅读What's the difference between the atomic and nonatomic attributes?Objective-C ARC: strong vs retain and weak vs assign 来了解一下。


    -(NSString *)lastTimeString;
    -(void)updateLastTime: (NSTimer *)t;    
    

    方法定义部分,在这里我们可以添加方法定义,我们将在&lt;Class Name&gt;.m中写入

    这里在第一个例子中,第一个方法将返回一个NSString,字符串也是一个指针类型,我们在Objective-C中写成-(NSString *)lastTimeString;,每一行都应该以;结尾(一个分号)。可以使用 NSString *t = [self lastTimeString]; 在同一类中调用此函数;或使用类的对象名称来自不同的类。

    在第二个示例中,方法的返回类型为 void,方法名称为 updateLastTime,它以 NSTimer 作为参数,其中 tNSTimer 变量,通过该变量可以在该函数中设置计时器。

    参考,Method Syntax in Objective C


    @end
    

    结束部分,这应该是任何类的最后一行,只有协议可以写出来。它告诉编译器不需要进一步编译。

    【讨论】:

      【解决方案3】:
      -(NSString *)lastTimeString;
      

      这是一个函数声明,它将返回一个NSString 类型变量。

      例如:NSString *myString = [self lastTimeString];

      -(void)updateLastTime: (NSTimer *)t;
      

      这也是一个函数声明,允许您将NSTimer 类型变量传递到其中。

      示例:[self updateLastTime:myTimerObj];

      以下是基础知识:

      没有参数的方法

      method type> (<return type>) <method name>;

      + (void) doLogin;
      
      - (void) doLogin;
      

      单参数方法

      <method type> (<return type>) <method name>: (<argument type>) <argument name>;
      
      +(void) doLoginWithUserId: (NSString *) userId;
      
      - (void) doLoginWithUserId: (NSString *) userId;
      

      具有 2 个参数的方法

      &lt;method type&gt; (&lt;return type&gt;) &lt;method name&gt;: (&lt;argument type&gt;) &lt;argument name&gt; &lt;argument 2 label&gt;: (&lt;argument 2 type&gt;) &lt;argument 2 name&gt;;

      +(void) doLoginWithUserId: (NSString *) userId andPassword : (NSString *) pwd;
      
      - (void) doLoginWithUserId: (NSString *) userId andPassword : (NSString *) pwd;
      

      具有单个 NSString 返回值的方法

      method type> (<return type>) <method name>;

      +(NSString *) doLogin;
      
      - (NSString *) doLogin;
      

      【讨论】:

        【解决方案4】:

        我将尝试比较 C-function 和 Objective-C 函数的语法,希望这能帮助你理解。

        以下不接受不返回任何内容:

        void function(); //C
        -(void) function; //Objective-C
        

        以下不返回任何内容并接受一个整数值。

        void function(int value); //C
        -(void) function:(int)value; //Objective-C
        

        Following 不返回任何内容,并接受两个参数,一个整数值,一个浮点值。请注意,在 Objective-c 中,方法名称已更改。事实上,对于每个额外的参数,我们都会在方法名称中添加一些有意义的词。

        void function(int iValue, float fValue); //C
        -(void) function:(int)iValue
             otherValue:(float)fValue; //Objective-C
        

        如果您希望返回任何值,只需使用 return 类型值代替 void

        另外,在Objective-C中我们有两种方法,一种以-开头的称为实例方法,另一种以+开头的称为类方法。

        只能从类的对象调用实例方法,而在不创建类实例的情况下调用类方法。

        例如:

        Yourclass *object = ... ;
        NSString *somevalue1 = [object method]; //this is an instance method since called by object
        NSString *somevalue2 = [YourClass cMethod]; //cMethod called without instance, directly with className
        

        【讨论】:

          【解决方案5】:

          -(NSString *)lastTimeString;
          这是一个返回类型为 NSString 的函数声明。 它会返回一个时间字符串。

          -(void)updateLastTime: (NSTimer *)t;

          这是一个更新时间的功能 它不会返回任何东西,所以它的返回类型是 void 要调用此函数,我们必须将计时器作为参数传递 [self updateLastTime:timer]

          【讨论】:

            猜你喜欢
            • 2012-12-16
            • 2012-08-15
            • 1970-01-01
            • 2012-01-12
            • 1970-01-01
            • 2011-03-12
            • 2013-09-16
            • 1970-01-01
            • 2011-06-22
            相关资源
            最近更新 更多