9

Xcode 9 ベータ版をダウンロードした後、ファイル テンプレート システムの変更に気付きました。

たとえば、2 つのファイルを作成する単純なテンプレートがありました (おそらく、そのようには機能しないはずです)。ベースファイル名は

___FILEBASENAME___.swift

___FILEBASENAME___View.swift

そして、TableCell.swift と TableCellView.swift を作成します。コードは次のとおりです。

//
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

import Foundation
import UIKit

class ___FILEBASENAME___: UITableViewCell {

    let mainView = ___FILEBASENAME___View()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setupCell()
        contentView.addSubview(mainView)
        mainView.setupView()
    }

    fileprivate func setupCell() {
        backgroundColor = UIColor.clear
        selectionStyle = .none
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

そしてファイルを表示:

//
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

import Foundation
import UIKit
import SnapKit

fileprivate struct Constants {

}

class ___FILEBASENAME___View: UIView {

    func setupView() {
        setupSelf()
    }

    fileprivate func setupSelf() {
            snp.makeConstraints { (make) in
                make.leading.trailing.top.bottom.equalTo(0)
        }
    }

}

このファイルを作成するために、テンプレートを選択するだけでした

新しいファイル...

メニューで、ex の名前を追加します。TableCell を押して Enter キーを押します。これを行うと、出力は次のようになります。

import Foundation
import UIKit

class TableCell: UITableViewCell {

    let mainView = TableCellView()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setupCell()
        contentView.addSubview(mainView)
        mainView.setupView()
    }

    fileprivate func setupCell() {
        backgroundColor = UIColor.clear
        selectionStyle = .none
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

import Foundation
import UIKit
import SnapKit

fileprivate struct Constants {

}

class NewCellView: UIView {

    func setupView() {
        setupSelf()
    }

    fileprivate func setupSelf() {
        snp.makeConstraints { (make) in
            make.leading.trailing.top.bottom.equalTo(0)
        }
    }

}

問題は、Xcode 9 でテンプレートの内容が変更されたことです (プレイグラウンドでテンプレートを使用するもの、とにかく初心者がプレイグラウンドでテンプレートを使用する方法は?)。

問題に戻ると、テンプレートからファイルを作成した後、TableCell.swift は同じように見えますが、この変更により TableCellView.swift がワイルドになります。

___FILEBASENAME___表示

新しくなる

___ファイルベース名___

したがって、TableCellView を作成すると、次のようになります。

import Foundation
import UIKit
import SnapKit

fileprivate struct Constants {

}

class TableCellViewView: UIView {

    func setupView() {
        setupSelf()
    }

    fileprivate func setupSelf() {
        snp.makeConstraints { (make) in
            make.leading.trailing.top.bottom.equalTo(0)
        }
    }

}

相互に依存関係を持つ複数のファイルを作成すると、問題はより複雑になります。たとえば、TableCellViewControllerDelegate へのデリゲートを持つ TableCellManager があります。

TableCellManagerViewControllerDelegate

代わりに

TableViewControllerDelegate

___FILEBASENAME___ は、スコープに応じて置き換えられます。新しく作成されたファイルがたとえば

___FILEBASENAME___View.swift

キーワード「Table」を使用すると、TableView.swift が作成されます - ___FILEBASENAME___ は「Table」ではなく「TableView」です

それを処理する方法があれば誰か教えてもらえますか?___KEYWORD___のような新しいものがあるかもしれませんか?新しいファイルの作成時に、古いバージョンの Xcode で ___FILEBASENAME___ のように機能するキーワードを入力したいと考えています。ヘルプ!

4

1 に答える 1

11

Xcode 9、Beta 4 の github に実用的なソリューションがあります。チェックしてください: https://github.com/reni99/Xcode-VIPER-Template

ここから解決策を得ました: https://github.com/infinum/iOS-VIPER-Xcode-Templates/tree/master/VIPER%20Templates/Module.xctemplate/UIViewController

あなたが探しているのはこの変数です: ___VARIABLE_moduleName___

必要に応じて TemplateInfo.plist を調整してください。

お役に立てれば :)

乾杯

于 2017-07-25T12:41:18.937 に答える