关于自定义XCode内UIKit相关的文件模板,网上已有很多的教程,这里来介绍下对于SwiftUI View的自定义模板创建。
1.下图为我们创建模板的展示,iOS下Source还是User Interface,User Interface下SwiftUI View还是我自定义的PSCustomScreen
图1.png
2.查看模版路径具体分析
路径:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates
图2.png
从上图我们可以看到,模板Templates分为文件模板和项目模板,我们再去到后面的User Interface文件夹里,我们可以看到如下,他们分别与图1 User Interface的模板相对应:
图3.png
同样的,我们去看另外的文件夹,他们的.xctemplate也与我们创建文件时的类型相对应。
根据图一,我们知道SwiftUI View模板属于iOS下的User Interface,所以我们自定义的SwiftUI View模板也放到iOS下的User Interface里。 在实现之前我们分析下要怎么做:
image.png
image.png
image.png
image.png
注:
红框里的.xib和.storybord是最终生成的文件
两个png是模板上展示的icon
.plist是模板配置文件
很明显:
SwiftUI View生成出来是个.swift文件;
icon我们可以自己定义;
.plist我们可以直接复制。
好,那咱们开始制作:
a.复制View.xctemplate文件夹,并放到桌面 b.删除文件夹里的.xib文件 c.去iOS/Source/Cocoa Touch Class.xctemplate/UIViewSwift下复制'FILEBASENAME.swift'文件
image.png
image.png
d.粘贴到我们桌面的View.xctemplate文件内
e.修改FILEBASENAME.swift里的内容
原本的因为是UIView,是UIKit框架,所以import UIKit,然后内容是class相关的
image.png
我们是SwiftUI,需要import SwiftUI,然后内容是struct相关,具体如下
image.png
这个例子是定义了Properties书写的位置、子视图书写的位置、一般类型的方法书写的位置、事件流转方法书写的位置和最后的Previews。
f.保存以上内容,将View.xctemplate命名成你想要的名字
g.将View.xctemplate命名后的文件放到User Interface下
image.png
h.这时候我们新建文件,就会出现我们自定义的模板(没有可以重启XCode再试试)
image.png
i.选择自定义模板创建文件,最终生成的.swift文件如下
image.png
//___FILEHEADER___
import SwiftUI
struct ___FILEBASENAMEASIDENTIFIER___: View {
// MARK: - Properties
var body: some View {
mainView
}
}
// MARK: - Subviews
extension ___FILEBASENAMEASIDENTIFIER___ {
@ViewBuilder var mainView: some View {
VStack {
}
}
}
// MARK: - Normal Func
extension ___FILEBASENAMEASIDENTIFIER___ {
}
// MARK: - Event Func
extension ___FILEBASENAMEASIDENTIFIER___ {
}
#if DEBUG
struct ___FILEBASENAMEASIDENTIFIER____Previews: PreviewProvider {
static var previews: some View {
___FILEBASENAMEASIDENTIFIER___()
}
}
#endif
___FILEBASENAMEASIDENTIFIER___是一个宏,代表我们自己的命名
其他的宏:
___PROJECTNAME___:工程名
___FILENAME___:包含后缀的文件名
___FILEBASENAME___ : 文件名
___FILEBASENAMEASIDENTIFIER___ :不包含后缀的c格式文件名
___VARIABLE_cocoaTouchSubclass___:继承的父类名字
___FULLUSERNAME___:用户名
___ORGANIZATIONNAME___:公司名
___COPYRIGHT___:版权说明
___DATE___:当前日期
___TIME___:当前时间
___YEAR___:当前年
___FILEHEADER___:默认类的头文件