En Objective C, je peux utiliser #pragma mark
pour marquer des sections de mon code dans le navigateur de symboles. S'agissant d'une commande de préprocesseur C, elle n'est pas disponible dans Swift. Existe-t-il un remplaçant pour cela dans Swift ou dois-je utiliser des commentaires déplaisants?
Vous pouvez utiliser // MARK:
Il a également été discuté que l'utilisation libérale des extensions de classe pourrait de toute façon être une meilleure pratique. Les extensions pouvant implémenter des protocoles, vous pouvez par exemple placez toutes vos méthodes de délégation de vue table dans une extension et regroupez votre code à un niveau plus sémantique que ne le permet #pragma mark
.
Pour ceux qui sont intéressés par l'utilisation d'extensions ou de marques pragma (comme mentionné dans le premier commentaire), voici comment l'implémenter à partir d'un Swift Engineer:
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 non plus nécessairement la meilleure pratique, mais c’est ainsi que vous procéderez si vous le souhaitez.
Jusqu'au Xcode 5, la directive de préprocesseur #pragma mark
existait.
A partir de Xcode 6, vous devez utiliser // MARK:
Ces fonctionnalités du préprocesseur permettent d’apporter une certaine structure à la liste déroulante des fonctions 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 va ici" en gras dans la liste déroulante
// MARK: - your text goes here
-> met "votre texte va ici" en gras dans la liste déroulante, précédé d'un séparateur horizontal
update: capture d'écran ajoutée car certaines personnes semblent toujours avoir des problèmes avec ceci:
Pragma mark - [SOME TEXT HERE]
a été utilisé dans Objective-C pour regrouper plusieurs fonctions en les séparant par une ligne.
En Swift , vous pouvez y parvenir en utilisant MARK, TODO OR FIXME
je. MARK: //MARK: viewDidLoad
Cela créera une ligne horizontale avec des fonctions regroupées sous viewDidLoad (montré dans la capture d'écran 1)
ii. TODO: //TODO: - viewDidLoad
Cela regroupera les fonctions sous la catégorie TODO: - viewDidLoad (affichée dans la capture d'écran 2)
iii. FIXME: //FIXME - viewDidLoad
Cela regroupera la fonction sous FIXME: - catégorie viewDidLoad (affichée dans la capture d'écran 3)
En code Objective-C, Xcode détecte des commentaires tels que // MARK: - foo
qui est un peu plus portable que #pragma
. Mais ceux-ci ne semblent pas être pris en compte (encore?).
Edit: corrigé dans Xcode 6 beta 4.
Document officiel d'Apple sur la barre de saut Xcode: Ajouter des annotations de code à la barre de saut
!!!:
et ???:
ne peuvent parfois pas être affichés.
Je pense que Extensions
est un meilleur moyen que #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) {
...
}
}
Confirmé avec un Apple Engineer dans le laboratoire Swift de WWDC ce matin, qu'il n'y a actuellement aucun # pragma ou équivalent pour le moment, ils considèrent qu'il s'agit d'un bogue, et cela arrivera bientôt, je devine donc la beta 2, j'espère.
Quoi qu'il en soit, c'est sur le chemin.
Xcode prend désormais en charge // MARK :, // TODO: et // les repères FIXME pour annoter votre code et les répertorier dans la barre de saut.
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.
Utilisation
// 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.
Autre moyen -
Utilisez-le de cette façon
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
Cela ajoutera non seulement une marque (tout comme la marque pragma), mais séparera également 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 MARK avec une ligne incluse.
Cela ne fonctionne qu'avec le commentaire MARK.
Le programmeur professionnel doit utiliser cette balise pour obtenir un bon code. C'est aussi bon pour le travail en équipe.
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
Il est facile de trouver une méthode comme celle-ci
//MARK:
ne pas semble travailler 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 de la barre de saut, dans mon cas, il indique MainWindowController(with a leading C icon)
, une fenêtre contextuelle apparaîtra affichant les effets du commentaire // MARK:, à savoir un en-tête "Mon style méthodes ":
3) Je remarque également que si je clique sur l'une des méthodes de mon code, celle-ci devient l'entrée la plus à droite de la barre de saut. Pour que MainWindowController(with a leading C icon)
soit l'entrée la plus à droite de la barre de saut, je dois cliquer sur l'espace vide au-dessus de mes méthodes.
Apple déclare dans la dernière version de Building Cocoa Apps ,
Le compilateur Swift n'inclut pas de préprocesseur. Au lieu de cela, il tire parti des attributs de compilation, des configurations de construction et des fonctionnalités de langage pour réaliser la même fonctionnalité. Pour cette raison, les directives du préprocesseur ne sont pas importées dans Swift.
Le caractère # semble toujours être votre façon de travailler avec diverses configurations de construction et autres choses du même genre, mais il semblerait qu’ils essaient de réduire votre besoin de pré-traitement dans la veine de pragma et de vous renvoyer à d’autres fonctionnalités du langage. C’est peut-être pour faciliter le fonctionnement des Playgrounds et du REPL se comportant aussi près que possible du code entièrement compilé.
Essaye ça:
// MARK: Reload TableView
func reloadTableView(){
tableView.reload()
}
Ajouter une tâche: Insérez un commentaire avec le préfixe TODO :. Par exemple: // TODO: [votre tâche].
Ajoutez un rappel de correction de bogue: Insérez un commentaire avec le préfixe FIXME :. Par exemple: // FIXME: [votre rappel de correction de bogue].
Ajouter un en-tête: Insérer un commentaire avec le préfixe MARK :. Par exemple: // MARK: [en-tête de votre 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. Par exemple: // MARK: - [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] -.