测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可 | MIT |
发布最新发布 | 2016年9月 |
由William.Tse维护。
依赖: | |
AFNetworking | ~> 2.6 |
FMDB | >= 0 |
WTFramework是一个用于iOS的工具框架,它封装了一些常用功能,如序列化、本地数据库、文件缓存、网络、信号等。在此感谢bee框架,给了我许多好的范例和想法。因此,我只是站在巨人的肩膀上。
虽然xcode支持轻量级泛型,但在反序列化时,我们仍然不能通过它从数组中获取对象类。现在,您可以使用List(ObjectType)而不是 NSArray
// TestModel.h
#import "TestItemModel.h"
@interface TestModel : WTModel
@property (nonatomic, strong) List(TestItemModel) *items;
@end
// TestModel.m
#import "TestModel.h"
@implementation TestModel : WTModel
@end
// TestItemModel.h
@interface TestItemModel : WTModel
@property (nonatomic, copy) NSNumber *itemId;
@property (nonatomic, copy) NSString *itemName;
@end
@generic(TestItemModel)
// TestItemModel.m
#import "TestItemModel.h"
@implementation TestItemModel : WTModel
@end
@def_generic(TestItemModel)
然后您可以直接像这样进行序列化和反序列化
NSString *json = @"\
{[\
{\"itemId\":1, \"itemName\":\"Mac\"},\
{\"itemId\":2, \"itemName\":\"IPhone\"},\
{\"itemId\":3, \"itemName\":\"IPad\"}\
]}";
//deserialize from json
TestModel *model = [TestModel objectFromJSONString:json];
//serialize to json
NSString *str = [model toJSONString];
本地数据库基于FMDB,并支持简单的ORM查询。
// UserModel.h
@interface UserModel : WTModel
@property (nonatomic, copy) NSNumber *userId;
@property (nonatomic, copy) NSNumber *userGender;
@property (nonatomic, copy) NSString *userName;
@end
// UserModel.m
#import "UserModel.h"
@implementation UserModel : WTModel
// define field attributes
WT_DATABASE_FIELD(userId, ((WTDatabaseFieldAttribute){.primaryKey=YES, .autoIncrement=YES}));
WT_DATABASE_FIELD(userGender, ((WTDatabaseFieldAttribute){.index=YES}));
@end
查询和更新数据
[WTDatabaseQueue inDatabase:^(WTDatabase *db){
//insert or update
UserModel *model1 = [UserModel model];
model1.userGender = @1;
model1.userName = @"LiLei";
model1.SAVE_INTO(db);
UserModel *model2 = [UserModel model];
model2.userGender = @0;
model2.userName = @"HanMeimei";
model2.SAVE_INTO(db);
//query
UserModel *result = UserModel.DB(db).WHERE(@"userName", @"LiLei").ORDER_ASC_BY(@"userGender")
.GET_FIRST();
//delete
result.DELETE_FROM(db);
//drop
UserModel.DB(db).DROP();
}];
此外,您仍然可以使用 "executeScalar", "executeQuery", "executeUpdate" 进行复杂的操作。
这里提供了文件缓存和内存缓存,您可以缓存任何对象。收到内存警告时,内存缓存数据将自动清除。
UserModel *model = [UserModel model];
//write to file
WTFileCache *fileCache = [WTFileCache sharedInstance];
[fileCache setObject:model forKey:@"user"];
//read from file
NSData *data = [fileCache objectForKey:@"user"];
UserModel *result = [data toObjectWithClass:[UserModel class]];
网络调用直接通过AFNetworking发起,并将查询参数序列化进行组合,您可以传输NSDictionary/WTModel/NSString。在响应者释放之前,请求将被取消。
//global setting
[WTHttp setBaseUrl:@"http://william-tse.com"];
//parameter
UserModel *model = [UserModel model];
model.userGender = @1;
model.userName = @"LiLei";
//get
[WTHttp get:@"/api/test" parameters:model success:^(id data){
TestModel *result = [TestModel objectFromDictionary:json];
//TODO:...
} failure:^BOOL(NSError *err){
NSLog(@"%@", err);
return NO;
} responder:viewController];
//post
[WTHttp post:@"http://google.com/api/test" parameters:model success:^(id data){
TestModel *result = [TestModel objectFromDictionary:json];
//TODO:...
} failure:^BOOL(NSError *err){
NSLog(@"%@", err);
return NO;
} responder:viewController];
当视图控制的某些事件发生时,会触发信号。它可以跨类和跨文件向上传输。您可以根据需要随时转发或停止传播。
ON_SIGNAL3(UIButton, signal)
{
UIButton *button = signal.target;
signal.handled = NO;
}
ON_SIGNAL3(UIButton, TouchDown, signal)
{
UIButton *button = signal.target;
}
WTFramework支持自定义信号。
ON_SIGNAL3(UIButton, TouchDown, signal)
{
id data = @"The data that you wanted to transmit";
WTSignal *signal = [WTSignal signalWithName:@"mysignal" target:signal.target object:data];
[self sendSignal:signal]
}
ON_SIGNAL2(mysignal, signal)
{
NSString *data = signal.object;
}