Starting small: SFQuote 先完成一小步
做项目的时候,我个人比较喜欢先从小的功能开始,逐渐把它们连成大的项目。在这个项目里,我们先新建一个类来保存引用的文字和作者。当然啦,所有的功能都可以写在一个文件里,但是我有点点代码洁癖啦,所以会新建一个类来放这些数据。
我们来新建一个类,点击 File > New > File,然后选择 OS X > Source > Cocoa Class,最后把它命名为 SFQuote。
这个类里面要写两个 NSString 属性,text 和person。我也会自定义初始化器,把它命名为 initWithLine,这个初始化器从文档里面获取文字,然后分别初始化 text 和 person。
首先来写 SFQuote.h:
NS_ASSUME_NONNULL_BEGIN
@interface SFQuote : NSObject
@property NSString *text;
@property NSString *person;
- (nullable instancetype)initWithLine:(NSString*)line;
@end
NS_ASSUME_NONNULL_END
你可以看到我直接把 NS_ASSUME_NONNULL_BEGIN 放在这里了,因为在里面,除了初始化器之外,所有属性和方法都是不能为空的。至于初始化器为什么可以返回空值,等一下你就知道了。
接着在实现文件里自定义初始化器,首先把一整行文字加载进来,然后用 componentsSeparatedByString 方法根据斜线的位置来分割对象,最后把值返回到数组里。如果这一行文字并不包含 text 和 person 这两个内容,就判定无效,返回 nil。这个。如果判定有效,就把它们分成两个属性来储存。
下面就是我的实现文件的代码:
@implementation SFQuote
- (instancetype)initWithLine:(NSString*)line {
if (self = [super init]) {
NSArray *split = [line componentsSeparatedByString:@"/"];
if ([split count] != 2) {
return nil;
}
self.text = split[0];
self.person = split[1];
}
return self;
}
@end