然后可以像下面这样使用:
let userModle = UserModel(userId: 1) { (builder) -> UserModelBuilder in
builder.email = "335050309@qq.com"
builder.name = "roy"
builder.age = 27
builder.address = "上海市杨浦区"
return builder
}
这种方式虽然我们需要为Model再创建一个Builder,略显啰嗦和复杂,但是当property较多,对Model的需求又比较复杂的时候这又确实是一种值得推荐的方式。
以上全是Swift的代码实现,下面我再贴上对应的OC代码
#import <Foundation/Foundation.h>
@interface RUserModelBuilder : NSObject
@property (nonatomic, strong, readwrite, nonnull) NSNumber *userId;
@property (nonatomic, copy, readwrite, nullable) NSString *name;
@property (nonatomic, copy, readwrite, nullable) NSString *email;
@property (nonatomic, copy, readwrite, nullable) NSNumber *age;
@property (nonatomic, copy, readwrite, nullable) NSString *address;
@end
typedef RUserModelBuilder *__nonnull(^RUserModelBuilderBlock)(RUserModelBuilder *__nonnull userModelBuilder);
@interface RUserModel : NSObject
@property (nonatomic, strong, readonly, nonnull) NSNumber *userId;
@property (nonatomic, copy, readonly, nullable) NSString *name;
@property (nonatomic, copy, readonly, nullable) NSString *email;
@property (nonatomic, copy, readonly, nullable) NSNumber *age;
@property (nonatomic, copy, readonly, nullable) NSString *address;
+ (nonnull instancetype)buildWithBlock:(nonnull RUserModelBuilderBlock)builderBlock;
@end
#import "RUserModel.h"
@implementation RUserModelBuilder
@end
@interface RUserModel ()
@property (nonatomic, strong, readwrite, nonnull) NSNumber *userId;
@property (nonatomic, copy, readwrite, nullable) NSString *name;
@property (nonatomic, copy, readwrite, nullable) NSString *email;
@property (nonatomic, copy, readwrite, nullable) NSNumber *age;
@property (nonatomic, copy, readwrite, nullable) NSString *address;
@end
@implementation RUserModel
#pragma mark - NSCopying
+ (nonnull instancetype)buildWithBlock:(nonnull RUserModelBuilderBlock)builderBlock {
RUserModelBuilder *userModelBuilder = builderBlock([[RUserModelBuilder alloc] init]);
RUserModel *userModel = [[RUserModel alloc] init];
userModel.userId = userModelBuilder.userId;
userModel.name = userModelBuilder.name;
userModel.email = userModelBuilder.email;
userModel.age = userModelBuilder.age;
userModel.address = userModelBuilder.address;
return userModel;
}
@end










