# pragma mark dans Swift?
Dans L'Objectif C, je peux utiliser #pragma mark
pour marquer des sections de mon code dans le navigateur de symboles. Comme il s'agit d'une commande de préprocesseur C, elle n'est pas disponible dans Swift. Y a-t-il un remplaçant pour cela dans Swift, ou dois-je utiliser des commentaires laids?
16 réponses
Vous pouvez utiliser // MARK:
Il a également été discuté que l'utilisation libérale des extensions de classe pourrait être une meilleure pratique de toute façon. Puisque les extensions peuvent implémenter des protocoles, vous pouvez par exemple mettre toutes vos méthodes de délégué de vue de table dans une extension et regrouper votre code à un niveau plus sémantique que #pragma mark
est capable de.
Pour ceux qui sont intéressés à utiliser des extensions par rapport aux marques pragma (comme mentionné dans le premier commentaire), voici comment l'implémenter à partir d'un ingénieur 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
}
}
Ce n'est pas nécessairement la meilleure pratique, mais c'est comme ça que vous le faites si vous le souhaitez.
Jusqu'à Xcode 5, la directive préprocesseur #pragma mark
existait.
À Partir de Xcode 6, vous devez utiliser // MARK:
Ces fonctionnalités de préprocesseur permettent d'apporter une certaine structure à la liste déroulante fonction de l'éditeur de code source.
Quelques exemples :
// MARK:
- > sera précédé d'un diviseur horizontal
// MARK: your text goes here
-> met "votre texte ici" en gras dans la liste déroulante
// MARK: - your text goes here
-> met "votre texte ici" en gras dans la liste déroulante, précédé par un séparation horizontale
Mise à jour: Ajout d'une capture d'écran car certaines personnes semblent encore avoir des problèmes avec ceci:
Pragma mark - [SOME TEXT HERE]
a été utilisé dans Objective-C pour regrouper plusieurs fonctions ensemble par séparation de ligne.
Dans Swift vous pouvez y parvenir en utilisant MARK, TODO OR FIXME
I. MARQUE : //MARK: viewDidLoad
Cela va créer une Ligne horizontale avec des fonctions regroupées sous viewDidLoad (montré dans la capture d'écran 1)
Ii. TODO : //TODO: - viewDidLoad
Cette fonction de groupe sous TODO: - viewDidLoad catégorie (montré dans la capture d'écran 2)
Iii. FIXME : //FIXME - viewDidLoad
Cette fonction de groupe sous FIXME: - viewDidLoad catégorie (montré dans la capture d'écran 3)
Dans le code Objective-C, Xcode détecte des commentaires comme // MARK: - foo
qui sont un peu plus portables que #pragma
. Mais ceux-ci ne semblent pas être ramassés, aussi (encore?).
Modifier: fixé dans Xcode 6 beta 4.
Je crois Extensions
est un meilleur moyen au lieu de #pragma mark
.
Le Code avant d'utiliser 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) {
...
}
}
Le code après avoir utilisé 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) {
...
}
}
Xcode 8 le gère maintenant comme suit et apparaît comme ceci dans la liste déroulante de la méthode:
Confirmé avec un ingénieur Apple dans le laboratoire Swift ce matin à la WWDC qu'il n'y a actuellement pas de # pragma ou équivalent pour le moment, ils considèrent cela comme un bug, et il arrivera bientôt, donc je devine beta 2, j'espère.
De toute façon, il est sur son chemin.
Xcode prend désormais en charge les repères / / MARK:, / / TODO: et / / FIXME pour annoter votre code et les répertorie dans la barre de saut
Documentation
Document officiel D'Apple sur la barre de saut Xcode: ajouter des annotations de code à la barre de saut
Prévisualisations
Code-Swift 4.2
Barre De Saut-Xcode 10.0
NOTE
!!!:
et???:
semblent ne plus être pris en charge comme dans Xcode 9.4.1.
Barre De Saut-Xcode 9.4.1
Il y a trois options pour ajouter #pragma_mark
dans Swift:
1) // MARK: - your text here -
2) // TODO: - your text here -
3) // FIXME: - your text here -
Remarque: Utilise -
pour ajouter des séparateurs
Utiliser
// MARK: SectionName
Ou
// MARK: - SectionName
Cela donnera une ligne au-dessus de la marque pragma, la rendant plus lisible.
Pour plus de facilité, ajoutez simplement
// MARK: - <#label#>
À vos extraits de code.
Chemin alternatif -
Utilisez - le de cette façon
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
Cela ajoutera non seulement mark (tout comme pragma mark) mais aussi bien séparer le code.
//# MARK: - Spinner Class Methods
Ajoutez une ligne entre les deux-points et votre description pour insérer une ligne de séparation. Cela aide à organiser votre code encore plus. Le code et la capture d'écran ci-dessus utilisent le commentaire de marque avec une ligne incluse.
- / / # MARK: - méthodes de texte (ligne)
- / / # MARK: méthodes de texte (pas de ligne)
Cela ne fonctionne qu'avec le commentaire MARK.
Programmeur professionnel doit être utiliser cette balise pour un bon code. Il est également bon pour le travail d'équipe.
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
//MARK:
ne pas semblent de travail pour moi dans Xcode 6.3.2. Cependant, c'est ce que j'ai fait pour le faire fonctionner:
1) Code:
import Cocoa
class MainWindowController: NSWindowController {
//MARK: - My cool methods
func fly() {
}
func turnInvisible() {
}
}
2) dans le jump bar
Rien ne semble changer lors de l'ajout du Commentaire //MARK
:. Cependant, si je clique sur le nom le plus à droite dans la barre de saut, dans mon cas il est dit MainWindowController(with a leading C icon)
, alors une fenêtre contextuelle s'affichera montrant les effets du / / MARK: comment, à savoir un en-tête qui dit " My cool les méthodes":
3) je remarque également que si je clique sur l'une des méthodes de mon code, la méthode devient l'entrée la plus à droite dans la barre de saut. Pour que MainWindowController(with a leading C icon)
soit l'entrée la plus à droite dans la barre de saut, je dois cliquer sur les espaces au-dessus de mes méthodes.
États Apple dans la dernière version de Création D'applications Cocoa,
Le compilateur Swift n'inclut pas de préprocesseur. Au lieu de cela, il prend avantage des attributs de compilation, des configurations de fonctionnalités de langue pour accomplir la même fonctionnalité. Pour ce raison, les directives du préprocesseur ne sont pas importées dans Swift.
Le caractère # semble toujours être la façon dont vous travaillez avec diverses configurations de construction et des choses comme ça, mais il on dirait qu'ils essaient de réduire votre besoin de la plupart des prétraitement dans la veine de pragma et de vous transférer vers d'autres fonctionnalités de langage. Peut-être est-ce pour aider au fonctionnement des terrains de jeux et le REPL se comportant le plus près possible du code entièrement compilé.
Ajouter un élément à faire: insérer un commentaire avec le préfixe TODO:. Par exemple: / / TODO :[ votre objet à faire].
Ajouter un rappel de correction de bug: insérez un commentaire avec le préfixe FIXME:. Par exemple: / / FIXME :[ votre Rappel de correction de bug].
Ajouter un titre: insérer un commentaire avec la marque de préfixe:. Par exemple: / / MARK :[ votre titre de section].
Ajouter une ligne de séparation: pour ajouter un séparateur au-dessus d'une annotation, ajoutez un trait d'Union (-) avant la partie commentaire de l'annotation. Exemple: // MARQUE: - [votre contenu]. Pour ajouter un séparateur sous une annotation, ajoutez un trait d'Union (-) après la partie commentaire de l'annotation. Par exemple: / / MARK :[ votre contenu] -.