iOS组件化开发实战记录

2020-01-21 07:54:41王振洲

UIView视图加载方式:

OC版本


+ (id)loadFromNIB {
 if ([[NSFileManager defaultManager] fileExistsAtPath:[NSBundle bundleForClass:[self class]].bundlePath]) {
 return [[[NSBundle bundleForClass:[self class]] loadNibNamed:[self description]
        owner:self
        options:nil] lastObject];
 }else{
 return [[[NSBundle mainBundle] loadNibNamed:[self description] owner:self options:nil] lastObject];
 }
 
}

+ (id)loadFromNIB:(NSInteger)index {
 if ([[NSFileManager defaultManager] fileExistsAtPath:[NSBundle bundleForClass:[self class]].bundlePath]) {
 return [[NSBundle bundleForClass:[self class]] loadNibNamed:[self description]
        owner:self
        options:nil][index];
 }else{
 return [[NSBundle mainBundle] loadNibNamed:[self description] owner:self options:nil][index];
 }
 
}

Swift版本


// MARK: - 通过nib加载视图
@objc public static func loadFromNIB() -> UIView! {
 return (Bundle(for: self.classForCoder()).loadNibNamed(self.description().components(separatedBy: ".")[1], owner: self, options: nil)?.first as? UIView)!
}

8. OC工程底层换swift代码

目前正在做OC底层的统一,换成swift写的代码。

1、控制器Base、Web控制器Base使用OC代码,因为OC控制器不能继承Swift,而Swift控制器可以继承OC写的控制器。

2、导航栏、工具栏、路由、基础组件、功能组件、混合开发插件都是用Swift语言。

3、Swift移动组件大部分完成,OC工程、Swift工程都统一使用开发的移动组件库。

9. 总结

经过半年的努力重构,终于将工程拆分成组件化开发了,也从中学到了很多,希望自己能再接再厉和同事一起进步。