Objective Cでは#pragma mark
、シンボルナビゲーターでコードのセクションをマークするために使用できます。これはCプリプロセッサコマンドであるため、Swiftでは使用できません。Swiftでこれに代わるものはありますか、それとも醜いコメントを使用する必要がありますか?
Objective Cでは#pragma mark
、シンボルナビゲーターでコードのセクションをマークするために使用できます。これはCプリプロセッサコマンドであるため、Swiftでは使用できません。Swiftでこれに代わるものはありますか、それとも醜いコメントを使用する必要がありますか?
回答:
使用できます // MARK:
とにかく、クラス拡張の寛大な使用がとにかくより良い実践であるかもしれないという議論もありました。拡張機能はプロトコルを実装できるため、たとえば、すべてのテーブルビューデリゲートメソッドを拡張機能に配置し、コードを#pragma mark
可能な範囲よりもセマンティックレベルでグループ化できます。
// MARK:
、// TODO:
そして// FIXME
ジャンプバーでスウィフトソースとリストにそれらをに。(ところで、これは(Obj)Cソースで既に実行されています- #pragma mark
これが唯一の方法ではありません。)はい、追加-
してMARK
、メニューにセパレータを配置できます。
MARK
ている場合でも、拡張機能を使用して、意味的に関連するある種のコード(特にプロトコルの実装)をグループ化すると便利です。私見では、プロトコル適合宣言を実装するメソッドのすぐ隣に置く方がずっと読みやすく、ファイルの上部に5つのプロトコル宣言がなく、下のどこかにランダムに50の関連するメソッド実装が散在しています。
#pragma mark
。// MARK: -
は単なる// MARK: - stuff
セパレーターであり、セパレーターとヘッダーを// MARK: - stuff -
提供し、1つのコメント行にセパレーター、ヘッダー、および別のセパレーターをすべて提供します。
Xcode 5までは、プリプロセッサディレクティブが#pragma mark
存在していました。
Xcode 6以降では、使用する必要があります // MARK:
これらのプリプロセッサ機能により、ソースコードエディターの関数ドロップダウンボックスに構造を持たせることができます。
いくつかの例 :
// MARK:
->水平分割線が先行する
// MARK: your text goes here
->ドロップダウンリストに「あなたのテキストはここに行く」を太字で表示します
// MARK: - your text goes here
->「あなたのテキストはここに行く」をドロップダウンリストに太字で置き、その前に水平の区切り線を置きます
更新:スクリーンショットを追加しました。これは、一部の人々がまだこれで問題を抱えているように見えるためです:
// MARK: - text
しているセパレータはなく、ドロップダウンリストには、単なるテキストではなくMARK:テキストが表示されます。
(最初のコメントで述べたように)拡張対プラグママークの使用に関心がある人のために、Swiftエンジニアから実装する方法を次に示します。
import UIKit
class SwiftTableViewController: UITableViewController {
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension SwiftTableViewController {
override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
return 1
}
override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
return 5
}
override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell? {
let cell = tableView?.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell;
cell.textLabel.text = "Hello World"
return cell
}
}
これは必ずしもベストプラクティスであるとは限りませんが、必要に応じてこれを行うことができます。
typealias
。例えばtypealias DataSource = SwiftTableViewController
。その後extension Datasource {}
UITableViewController
はプロトコルではなく、クラスです。おそらくを意味しますUITableViewControllerDataSource
が、これは例で使用されているパターンではありません。
extension
プロトコルにヘッダーが付いていないのか疑問に思っていextension SwiftTableViewController : UITableViewController
ます。たとえば、クラスにその拡張機能を追加した理由を理解する方が読みやすいでしょう。
extension SwiftTableViewController : UITableViewDelegate { .. }
とextension SwiftTableViewController : UITableViewDatasource { .. }
Pragma mark - [SOME TEXT HERE]
Objective-Cでは、複数の関数を行区切りでグループ化するために使用されていました。
Swiftではこれを使用してこれを達成できますMARK, TODO OR FIXME
私。マーク: //MARK: viewDidLoad
これにより、viewDidLoad(スクリーンショット1に表示)の下にグループ化された関数を含む水平線が作成されます
ii。TODO: //TODO: - viewDidLoad
これにより、機能がTODOの下にグループ化されます。-viewDidLoadカテゴリ(スクリーンショット2に表示)
iii。FIXME: //FIXME - viewDidLoad
これにより、FIXMEの下で機能がグループ化されます。-viewDidLoadカテゴリ(スクリーンショット3に表示)
詳細については、このアップルのドキュメントを確認してください。
Xcode Jump Barに関するAppleの公式ドキュメント:コード注釈をジャンプバーに追加する
!!!:
そして???:
時々表示することができない。
Objective-Cコード// MARK: - foo
では、Xcodeは次のようなコメントを検出します。#pragma
。しかし、これらも(まだ?)拾われていないようです。
編集:Xcode 6ベータ4で修正されました。
// MARK: -
現時点では機能していないことが確認できます。
// MARK:
使っていて、うまくいっていないようです。私はスペースを入れて、入れずに、コロンを付けて、付けずに、すべて大文字で混合して(マーク)試しました。トリックはありますか?設定などをアクティブにする必要がありますか?
私Extensions
はより良い方法だと思います#pragma mark
。
使用前のコードExtensions
:
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
...
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
...
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
...
}
}
使用後のコードExtensions
:
class ViewController: UIViewController {
...
}
extension ViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
...
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
...
}
}
extension ViewController: UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
...
}
}
extension
Xcodeのブレッドクラムコントロールのドロップダウンメニューでは、1つだけでは目立たないため、両方を使用します。
// ARK:
Xcode 8の私のように表示されます
!!!
???
今朝WWDCでSwiftラボのAppleエンジニアに確認されましたが、現時点では#pragmaまたは同等のものはありません。彼らはこれをバグと見なしており、間もなく届くので、ベータ2と思います。
とにかく、それは途中です。
Xcodeは// MARK:、// TODO:および// FIXMEランドマークをサポートして、コードに注釈を付け、それらをジャンプバーにリストします
使用する
// MARK: SectionName
または
// MARK: - SectionName
これにより、プラグママークの上に行が表示され、読みやすくなります。
簡単に追加するだけです
// MARK: - <#label#>
あなたのコードスニペットに。
別の方法-
このように使用する
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
これにより、(プラグママークのように)マークが追加されるだけでなく、コードが適切に分離されます。
//MARK
形式(スペースなし)と示唆// MARK: (text)
(1つのスペースの間//
とMARK、スペースなしの間MARK
と:
し、1つのスペースの間:
とセクション名)
//# MARK: - Spinner Class Methods
コロンと説明の間に行を追加して、区切り線を挿入します。これにより、コードをさらに整理できます。上記のコードとスクリーンショットは、行が含まれているMARKコメントを利用しています。
これはMARKコメントでのみ機能します。
次のようなSwift 4.2 / XCode 10コンパイラ指令にも興味があるかもしれません
#warning("Some string to display")
そして
#error("Some error to display")
あなたが本当に何かを見逃したくないとき、それは役に立つかもしれません。
プロのプログラマーは、適切なコードのためにこのタグを使用する必要があります。チームワークにも最適です。
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
このような方法を見つけるのは簡単です
//MARK:
Xcode 6.3.2では、私には機能しないようです。しかし、これはそれを機能させるために私がやったことです:
1)コード:
import Cocoa
class MainWindowController: NSWindowController {
//MARK: - My cool methods
func fly() {
}
func turnInvisible() {
}
}
2):コメントをjump bar
追加しても何も変化していないよう//MARK
です。ただし、ジャンプバーで右端の名前をクリックするとMainWindowController(with a leading C icon)
、私の場合はと表示され、ポップアップウィンドウに// MARK:コメントの効果、つまり「My cool methods」という見出しが表示されます。
3)コードのメソッドの1つをクリックすると、そのメソッドがジャンプバーの右端のエントリになることにも気付きました。MainWindowController(with a leading C icon)
ジャンプバーの右端のエントリになるためには、メソッドの上にある空白をクリックする必要があります。
Appleは、Building Cocoa Appsの最新バージョンで、
Swiftコンパイラにはプリプロセッサは含まれていません。代わりに、コンパイル時の属性、ビルド構成、および言語機能を利用して、同じ機能を実現します。このため、プリプロセッサディレクティブはSwiftにインポートされません。
#文字は依然としてさまざまなビルド構成やそのようなものを操作する方法であるように見えますが、プラグマの脈絡でほとんどの前処理の必要性を削減し、他の言語機能に完全に転送しようとしているようです。おそらくこれは、完全にコンパイルされたコードにできるだけ近い動作をするPlaygroundとREPLの操作を支援するためです。
To-Doアイテムを追加:プレフィックスTODO:のコメントを挿入します。例:// TODO:[あなたのTo-Doアイテム]。
バグ修正のリマインダーを追加:接頭辞FIXME:を付けてコメントを挿入します。例:// FIXME:[バグ修正のリマインダー]。
見出しを追加:プレフィックスMARK:でコメントを挿入します。例://マーク:[セクションの見出し]。
区切り線を追加する:注釈の上に区切り線を追加するには、注釈のコメント部分の前にハイフン(-)を追加します。例://マーク:-[あなたのコンテンツ]。注釈の下にセパレータを追加するには、注釈のコメント部分の後にハイフン(-)を追加します。例://マーク:[あなたのコンテンツ]-。
プラグママークは、コードを読みやすくするための方法です。プラグマのコメントは、Xcodeジャンプバーのタグのように表示されます。
//MARK: <Your comment goes here>
例:コードでは、
//MARK: Properties
// MARK: View Life cycle
//MARK: Helper methods
これは、Xcodeジャンプバーに表示される方法です。