在学习如何使用swift的init构造方法的具体用法前,我们先设想一个场景: 有个学生系统包含学生类,学生有名字和年龄,名字是必填的,年龄是非必填的,如何设计这个类呢?
OC是如何完成的?
我们先使用OC来完成,方便后面对比:
先看下类设计:
@interface LFStudent : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
然后我们增加下初始化方法,这里我们要使用OC中特有的全能方法,然后为了方便用户只需要初始化名称的场景,我们会增加一个只包含name入参的函数,函数如下:
- (instancetype)initWithName:(NSString *)name age:(NSInteger)age
{
if (self = [super init]) {
_name = name;
_age = age;
}
return self;
}
- (instancetype)initWithName:(NSString *)name
{
return [self initWithName:name age:-1];
}
这里注意,我们只使用了一个可以最终初始化的全能方法,而其他的方法,我们是调用这个全能方法来完成的,有了全能方法,能保证我们的类的初始化的最后都是收到一个入口