作为一个习惯了Java语言的Android开发人员,初识oc对于其复杂的语法结构是极其不适应的,不过也没办法,自己选的路,头发掉光也得走完。
因为需要快速入门,所以只是做简单语法的记录,供以后查阅,适用于想快速了解一些oc基本语法的开发人员。
以下表格需要简单记一下,每次创建一个自定义类时,ide会帮我们生成两个文件,xxx.h头文件,xxx.m实现文件。
头文件 | 实现文件 | |
---|---|---|
c语言 | .h | .c |
oc语言 | .h | .m |
.h文件我们暂时可以理解为java中的接口,.m文件就是实现了该接口的具体类文件。(因本人相对比较了解Java语言,所以会用java与oc来类比)
1 创建自定义类
1.1 创建类
在xcode中,new file--选中ios,点击cocoa touch class,填写类名,确认保存位置,这时就会出现(类名.h)和(类名.m)两个文件。
// Student.h文件
#import <Foundation/Foundation.h>
// 用 @interface 定义一个接口类Student
// @end 标记这个类结束的位置
// 这里的冒号是继承的意思
@interface Student : NSObject
@end
//Student .m文件
// 导入Student接口类
#import "Student.h"
// 用 @implementation 实现Student接口类,@end 符号
@implementation Student
@end
从上面可以看出,基本的类结构就是定义文件和实现文件分开,可能这样分工更明确吧。
1.2 类的初始化
初始化一个student类,oc中调用方法使用中括号来表示,如下所示。
// 初始化一个Student对象
Student *s1 =[[Student alloc]init];
// 调用run方法
[s1 run];
[Student alloc]
这是调用Student alloc方法,为student类开辟内存空间。用类名直接调用,可以理解为java的静态方法。紧接着就是调用init方法进行初始化工作。
1.3 类的实现
类中有成员变量和属性,类内使用成员变量,类外使用属性。
- 成员变量:可以理解为类内之间的属性值,但一般情况下对外部不公开
- 属性:类似java中的被public修饰的成员变量,可被外部调用。
以下定义了各种类型的方法,并且分别进行了实现。
// 类内使用成员变量,类外使用属性
#import <Foundation/Foundation.h>
@interface Person : NSObject{
// 成员变量
NSString *_personName;
int _personAge;
int _personSex;
}
// 自定义构造方法,注意返回 instancetype 类型
-(instancetype) initWithPersonName:(NSString*) personName andPersonAge:(int)personAge;
// 成员属性
@property(nonatomic,strong) NSString *personName;
// 无参数 无返回值 函数
-(void)run;
// int型返回值,int型参数值 函数,注意冒号后紧跟的就是参数类型和参数名
-(int)workTime:(int) hour;
// 双参数a 和 andB中的空格不能少
-(int)plusA:(int)a andB:(int)b;
-(int)plusA:(int)a :(int)b;
@end
具体的实现如下
#import "Person.h"
@implementation Person
- (instancetype)init{
self = [super init];
if (self) {
_personName = @"lisa";
_personAge = 15;
_personSex = 1;
}
return self;
}
- (instancetype)initWithPersonName:(NSString *)personName andPersonAge:(int)personAge{
self = [super init];
if (self) {
_personName = personName;
_personAge = personAge;
}
return self;
}
- (void)run{
NSLog(@"person is running");
}
- (int)workTime:(int)hour{
if (hour > 8) {
return hour;
}
return 8;
}
-(int)plusA:(int)a andB:(int)b{
return a+b;
}
- (int)plusA:(int)a :(int)b{
return a*b;
}
@end
1.4 在类中的调用
// 初始化person对象
Person *p1 =[[Person alloc]init];
// 调用workTime方法,传入一个int型参数9,并返回一个int型值
int workTime1 = [p1 workTime:9];
// 调用plusA andB方法(这种写法还真是有点恶心)
[p1 plusA:3 andB:9];
2 数据类型
某些数据类型和java比较类似,就不贴出来,来看看差异比较大的一些类型。
2.1 string类型
初始化一段字符串,用@符号加双引号,当不是基础数据类型时,注意加指针符号*。
NSString *str1 = @"这是文本1";
// %@符号:字符串占位符
NSLog(@"str1 = %@",str1);
2.2 NSDictionary
Person *p1 =[[Person alloc]init];
Person *p2 =[[Person alloc]init];
// p1为value值,@"1"为key值
NSDictionary *dicPerson = [NSDictionary dictionaryWithObjectsAndKeys:p1,@"1",p2,@"2", nil];
// 取出key为1的值,如下
Person *p4 = [dic objectForKey:@"1"];
NSString *str1 = @"这是文本1";
NSString *str2 = @"这是文本2";
NSDictionary *dicStr = @{str1:@"1",str2:@"2"};
以后还会陆续更新后续的学习内容。
网友评论