MVVM与模板化开发
来源:互联网 发布:qq飞车noble激光数据 编辑:程序博客网 时间:2024/05/22 10:35
本文不对MVVM划分做过多解释,只做模板化的讨论。
当完成MVVM后。项目中增加了很多ViewModel 的文件
比如TableViewModel ViewControllerViewModel CellViewModel
为了统一管理,每个都有自己的基类,导致项目中分很多文件夹,每个然后每次创建一个控制器的时候
都需要创建多个文件 一不小心就会写错命名 一不小心就会忘记了要继承 非常费力
我是这样完成这部分功能的
1.首先分别给每个需要处理的部分创建.h 和.m的文件模板,
这个功能块是不复杂的,只要搜索 Xcode 自定义模板 就可以解决了
做完这个功能块,发现了很多问题,因为很多viewModel 相互之间和控制器里面是有import关系的,每个ViewModel 命名都不一样
所以是不能写死的,写死了就不存在这个类,不写死又会报错。
所以我就想在 一个自定义模板里面放多个文件,然后改其后缀名
这样就可以相互之间引用了。
就是把控制器 viewModel cell、等等都放到一个模板生成里面。
2.试了一下,确实能够成功,在我以为大功告成的时候,发现一个问题 ,就是___FILEBASENAMEASIDENTIFIER___
并不是你输入的那个名字,而是你.h 或者.m的名字, 这样引用其他文件就造成了很大的问题
比如你新建一个模板 ,命名为ABC
那么会生成 ABC_ViewController,ABC_ViewControllerViewModel
ABC_TableCell, ABC_Model,这四个.h 和.m的文件
ABC_ViewControllerViewModel 需要引入ABC_TableCell 和ABC_Model 的头文件
于是我在模板中这样写 import "___FILEBASENAMEASIDENTIFIER___TableCell.h"
和 import "___FILEBASENAMEASIDENTIFIER___Model,.h"
并信心满满的认为会引入ABC_TableCell 和ABC_Model 正确的头文件
实际上 引入的头文件名称被变为 ABC_ViewControllerViewModelModel
和ABC_ViewControllerViewModelTableCell
多出了ViewControllerViewModel
是因为这个参数 是和文件名保持一致的而不是和你本身输入的ABC保持一致的、
这样下来是不是没有办法了呢。我找了一下午 找到一篇有可能的解决方案
创建自定义Xcode 4文件模板
原来plist 很多参数都是有意义都可以修改的
拉到最下面 有这样一段代码
#import "User.h"@interface UserTest : GHTestCase@end@implementation UserTest- (void)setUp {}- (void)tearDown {}- (void)testMethod { // Implement test case}@end
说明这段代码成功的引用了User 并没有和GHTestCase关联在一起
他的结尾提供了文件模板,找到他的plist 看一下
<array> <dict> <key>Default</key> <string/> <key>Description</key> <string>What would you like to test?</string> <key>Identifier</key> <string>cutClass</string> <key>Name</key> <string>Test case for</string> <key>Required</key> <true/> <key>NotPersisted</key> <true/> <key>Type</key> <string>text</string> </dict> <dict> <key>Default</key> <string>___VARIABLE_cutClass:identifier___Test</string> <key>Identifier</key> <string>productName</string> <key>Type</key> <string>static</string> </dict> </array>
这是一段xml 我来解释一下这段是什么意思
数组包含两个字典
第一个字典 是可以输入的 就是用户输入的 因为类型为Text
然后把第一个字典的 Identifier 设置成为 cutClass
第二个字典是做什么的呢 他的内容不是用户输入的 是 static 静态的
内容为___VARIABLE_cutClass:identifier___Test 什么意思呢
就是 找到字典 identifier 为cutClass 的变量数值 后面在拼接Test 作为新的identier
就是说第二个字典这个___VARIABLE_cutClass:identifier___Test
就可以获取到用户输入的名称了
于是我就参照这个进行仿写xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>Identifier</key> <string>productName</string> <key>Required</key> <true/> <key>Name</key> <string>The name of the class to create:</string> <key>Description</key> <string>The name of the class to create</string> <key>Type</key> <string>text</string> <key>NotPersisted</key> <true/></dict><dict> <key>Default</key> <string>___VARIABLE_productName:identifier___</string> <key>Identifier</key> <string>cutClass</string> <key>Type</key> <string>static</string></dict></plist>
这样就可以捕获用户输入的内容了
然后把 `import "___FILEBASENAMEASIDENTIFIER___TableCell.h"
改成 #import "___VARIABLE_cutClass:identifier___TableCell.h"
这下生成就不会出错了
就可以直接使用了。
这里是下载链接
通过这次对文件模板的使用
意识到文件模板本身是非常强大的,可以写单例,也可以用来提供MVVM的文件结构代码,极大的减少了重复代码创建的时间。甚至可以用来建立新的项目
建立新项目的时候很多代码是完全一样的,就可以用文件模板来建立
还有许多其他的功能等待开发。
难点是集中在 plist 文件上,如果我没找到上面的文章例子,这次的文件模板化就不完整了。因此对plist 的关键字的理解,才是用好文件模板的关键。
- MVVM与模板化开发
- 【iOS开发】美团网 MVVM 与 RAC
- iOS开发项目架构浅谈:MVC与MVVM
- MVVM开发模式
- 移动开发 细究MVVM
- mvvm开发模式
- MVVM开发模式
- MVVM教程(一):MVVM简介与准备工作
- 我与MVVM
- MVC与MVVM
- MVC 与MVVM
- MVC, MVP与MVVM
- 模块化-MVC与MVVM
- MVP与MVVM模式
- mvvm 与 mvc
- ios MVVM与reactivecocoa
- mvc与mvvm区别
- iOS MVVM 与 RxSwift
- Zookeeper简介
- 当面试官问你“业余爱好”时如何巧妙回答呢?
- JavaWeb第二章HTML与CSS网页03
- String prototype一个 小字符串方法,感觉他挺好的,原型链是个好东西
- 固定定位
- MVVM与模板化开发
- [codevs1022]覆盖(染色+二分图最大匹配)
- Android 经典笔记七:CountDownTimer解读
- 声明与定义
- 在美国收入多少算中产?各州有各州的标准
- Arduino基础入门四:数字IO口作为输入
- ssm文件上传文件
- Centos jenkins 自动部署到tomcat容器中
- 22. Generate Parentheses