# 在Xcode新增程式模板 ###### tags: `Xcode`, `Swift` 前公司專案的架構是用MVVM-C,在新增一個分頁時,通常要新增Model、View Model、View Controller和Coordinator。比如LoginModel、LoginViewModel...之類,而這些檔案的內容格式其實大同小異,如果每次都要從舊有的檔案複製貼上,實在是很浪費時間。 因此,把常用的程式碼建成模板,之後新增檔案就會變得輕鬆愉快 Xcode的Templates放在`/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates`路徑底下 我們在這新增一個MVVMC.xctemplate的資料夾 要新增模板,需要創建兩樣東西 1. TemplateInfo.plist -> 模板的內容欄位設定 2. ___ FILEBASENAME ___.swift -> 模板的程式碼內容 TemplateInfo內容如下 ``` <?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>Image</key> <dict> <key>FileTypeIcon</key> <string>swift</string> <--- 設置icon,這邊與一般Swift檔相同 </dict> <key>Kind</key> <string>Xcode.IDEKit.TextSubstitutionFileTemplateKind</string> <key>Platforms</key> <array> <string>com.apple.platform.iphoneos</string> <--- 支援的平台 </array> <key>Options</key> <array> <dict> <key>Identifier</key> <string>productName</string> <key>Required</key> <true/> <key>Name</key> <string>Module Name</string> <key>Description</key> <string>The name for MVVMC files</string> <key>Type</key> <string>text</string> <key>Default</key> <string>Module1</string> </dict> </array> </dict> </plist> ``` 接著舉View Controller的程式碼作為示範 ### View Controller 模板裡直接import好需要的套件、寫好要綁定的VM和各種必備的properties 寫好一次後就不用再傻傻地複製貼上了 ``` import UIKit import SnapKit import RxSwift import RxCocoa class ___FILEBASENAME___: UIViewController { var viewModel: ___VARIABLE_productName___ViewModelPrototype? override func viewDidLoad() { super.viewDidLoad() setupUI() bind(viewModel) } private let disposeBag = DisposeBag() } private extension ___FILEBASENAME___ { func setupUI() { } func bind(_ viewModel: ___VARIABLE_productName___ViewModelPrototype?) { } } ``` 建完模板後,資料夾內部有這些檔案  ### 實際使用 之後要新增檔案時,只需到File > New > File 往下拉到Templates,點選我們建立好的模板  輸入檔名,也就是自動替換掉上面的___ FILEBASENAME ___   一個步驟就幫我們生成四份檔案 這種感覺實在太美妙😌
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up