# 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?

812
demandé sur Moritz 2014-06-03 18:05:56

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.

1019
répondu Frank Schmitt 2018-09-19 05:20:56

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.

157
répondu NatashaTheRobot 2014-06-05 20:00:13

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:

entrez la description de l'image ici

154
répondu Ronny Webers 2015-04-13 16:40:34

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)

Capture d'écran 1

Ii. TODO : //TODO: - viewDidLoad

Cette fonction de groupe sous TODO: - viewDidLoad catégorie (montré dans la capture d'écran 2)

Capture d'écran 2

Iii. FIXME : //FIXME - viewDidLoad

Cette fonction de groupe sous FIXME: - viewDidLoad catégorie (montré dans la capture d'écran 3)

Capture d'écran 3

101
répondu Jayprakash Dubey 2015-10-09 13:52:59

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.

53
répondu Nikolai Ruhe 2014-07-22 00:17:00

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) {
       ...
    }
}
35
répondu jqgsninimo 2017-01-19 06:34:13

Xcode 8 le gère maintenant comme suit et apparaît comme ceci dans la liste déroulante de la méthode:

entrez la description de l'image ici

32
répondu Antoine 2016-06-17 00:25:35

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

31
répondu Daniel 2014-07-21 21:55:32

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

Aperçu dans le code

Barre De Saut-Xcode 10.0

NOTE

!!!: et ???: semblent ne plus être pris en charge comme dans Xcode 9.4.1.

Aperçu dans la barre de saut Xcode 10.0

Barre De Saut-Xcode 9.4.1

Aperçu dans la barre de saut Xcode 9.4.1

22
répondu George 2018-09-23 09:04:34

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

17
répondu Jaydip 2018-03-27 05:51:56

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.

16
répondu Nikhil Manapure 2017-10-30 10:41:45
//# 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.

  1. / / # MARK: - méthodes de texte (ligne)
  2. / / # MARK: méthodes de texte (pas de ligne)

Cela ne fonctionne qu'avec le commentaire MARK.

entrez la description de l'image ici

13
répondu aashish tamsya 2016-02-29 09:35:11

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 

Il est facile de trouver la méthode comme ceci

7
répondu Harshil Kotecha 2017-07-06 05:12:59

//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":

entrez la description de l'image ici

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.

5
répondu 7stud 2015-07-03 23:01:28

É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é.

3
répondu UtopiaLtd 2014-06-03 14:19:49

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] -.

1
répondu Hiren 2018-09-08 15:29:07