我正在关注一个关于对象的教科书中的一些例子但是在某种程度上我完全错过了某种语法风格或规则,我不确定我在这里看到的是什么。
这两种方法是我有点坚持的。我不确定我应该如何从字面意义上阅读它们。
这是一个字符串函数,它接受一个指向我们称之为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
答案 0 :(得分: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
希望这会有所帮助
答案 1 :(得分:0)
-(NSString *)lastTimeString;
这是一个函数声明,它将返回NSString
类型变量。
示例:NSString *myString = [self lastTimeString];
-(void)updateLastTime: (NSTimer *)t;
这也是一个函数声明,允许您将NSTimer
类型变量传递给。
示例:[self updateLastTime:myTimerObj];
以下是基础知识:
没有参数的方法
&LT; 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个参数的方法
<method type> (<return type>) <method name>: (<argument type>) <argument name> <argument 2 label>: (<argument 2 type>) <argument 2 name>
;
+(void) doLoginWithUserId: (NSString *) userId andPassword : (NSString *) pwd;
- (void) doLoginWithUserId: (NSString *) userId andPassword : (NSString *) pwd;
具有单个NSString返回值的方法
&LT; method type> (<return type>) <method name>;
+(NSString *) doLogin;
- (NSString *) doLogin;
答案 2 :(得分:0)
- (NSString *)lastTimeString;
这是一个函数声明,其返回类型为NSString。
它会返回一个时间字符串。
- (void)updateLastTime:(NSTimer *)t;
这是更新时间的功能 它不会返回任何东西,所以它的返回类型是无效的 要调用此函数,我们必须将timer作为参数传递 [self updateLastTime:timer]
答案 3 :(得分:0)
我将尝试比较C函数和Objective-C函数语法,希望这有助于您理解。
以下什么都不接受并且什么也不返回:
void function(); //C
-(void) function; //Objective-C
以下返回任何内容并接受一个整数值。
void function(int value); //C
-(void) function:(int)value; //Objective-C
以下返回任何内容并接受两个参数,每个参数包含一个整数值和一个浮点值。请注意,在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
答案 4 :(得分:0)
突出显示:
主要有两个类的文件,第一个头文件(classname.h)和第二个实现文件(classname.m)。您的代码我考虑的是头文件。我将用参考链接向您解释每一行。如果您仍然对此表示怀疑,请告诉我。
#import <Foundation/Foundation.h>
导入部分,在这里您应该导入(写为#import)任何框架工作或类来访问其公共方法,ivars,块或其他属性。在这个例子中,我们从iOS自己导入Foundation框架(默认添加)。
@interface BNRLogger : NSObject
接口部分,在这里你可以写出你的类或类的名称,在这个例子中,我们正在创建一个名为BNRLogger的自定义类,它派生自NSObject。 You can read more about NSObject here请also 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;
方法定义部分,在这里我们可以添加我们将在
<Class Name>.m
内编写的方法定义在第一个例子中,第一个方法将返回
NSString
,字符串也是一个指针类型,我们在Objective-C中写成-(NSString *)lastTimeString;
,每一行应以{{1}结尾(分号)。可以使用NSString * t = [self lastTimeString]在同一个类中调用此函数;或者使用类的对象名来自不同的类。在第二个示例中,方法的返回类型为void,方法名称为updateLastTime,其中
;
为参数,其中NSTimer
为t
变量,通过该变量,可以在其中设置计时器那个功能。
参考,Method Syntax in Objective C
NSTimer
结束部分,这应该是任何类的最后一行,只有协议可以写出来。它告诉编译器不需要进一步编译。