Question Marque #pragma dans Swift?


En Objective C, je peux utiliser #pragma mark pour marquer les 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. Existe-t-il un remplaçant pour Swift, ou dois-je utiliser des commentaires laids?


799
2018-06-03 14:05


origine


Réponses:


Vous pouvez utiliser // MARK:


Historique, avant Xcode 6 Beta 4

Juste parlé à un ingénieur ici à la WWDC, et la version bêta actuelle de Xcode ne met pas en œuvre le

// MARK: 

style encore, mais on me dit que les versions futures le seront.

Il a également été suggéré que l'utilisation généralisée 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 grouper votre code à un niveau plus sémantique que #pragma mark est capable de.


1002
2018-06-04 12:46



Pour ceux qui sont intéressés par l'utilisation des extensions et des 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.


156
2018-06-05 20:00



Jusqu'à Xcode 5 la directive du préprocesseur #pragma mark existé.

À partir de Xcode 6, vous devez utiliser // MARK:

Ces fonctionnalités de préprocesseur permettent d'apporter de la 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 diviseur horizontal

mise à jour: ajout d'une capture d'écran parce que certaines personnes semblent encore avoir des problèmes avec ceci:

enter image description here


152
2017-10-16 15:49



Pragma mark - [SOME TEXT HERE] a été utilisé dans Objective-C pour grouper plusieurs fonctions ensemble par séparation de ligne.

Dans Rapide vous pouvez y parvenir en utilisant MARK, TODO OR FIXME

je. MARQUE :  //MARK: viewDidLoad 

Cela va créer un ligne horizontale avec des fonctions groupées sous viewDidLoad (montré dans la capture d'écran 1)

Screenshot 1

ii. FAIRE :  //TODO: - viewDidLoad

Cela regroupera la fonction sous TODO: - viewDidLoad catégorie (montrée en capture d'écran 2)

Screenshot 2

iii. RÉPARE-MOI :  //FIXME - viewDidLoad 

Cela regroupera la fonction sous FIXME: - viewDidLoad catégorie (montrée en capture d'écran 3)

Screenshot 3


100
2017-10-09 13:52



Dans le code Objective-C, Xcode détecte les commentaires comme // MARK: - foo ce qui est un peu plus portable que #pragma. Mais ceux-ci ne semblent pas être pris, aussi (encore?).

Edit: corrigé dans Xcode 6 beta 4.


53
2018-06-03 14:12



je pense Extensions est une meilleure façon 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 l'utilisation 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
2018-06-30 09:05



Confirmé avec un ingénieur Apple dans le laboratoire Swift ce matin à la WWDC qu'il n'y a actuellement aucun #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, c'est sur le chemin.


Xcode prend désormais en charge // MARK :, // TODO: et // FIXME landmarks pour annoter votre code et les énumère dans la barre de saut


31
2018-06-06 21:58



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

enter image description here


30
2018-06-17 00:25



Utilisation

// MARK: SectionName

ou

// MARK: - SectionName

Cela donnera une ligne au-dessus de la marque pragma, ce qui le rendra plus lisible.

Pour la facilité, il suffit d'ajouter

// MARK: - <#label#>

à vos extraits de code.

Autre moyen -

Utilisez-le de cette façon

private typealias SectionName = ViewController
private extension SectionName  {
    // Your methods
}

Cela ne va pas seulement ajouter une marque (tout comme la marque pragma) mais aussi bien séparer le code.


16
2017-11-21 10:54



Il y a trois options à ajouter #pragma_mark à Swift:

1) // MARK: - your text here -

2) // TODO: - your text here -

3) // FIXME: - your text here -

Note: Utilisations - pour ajouter des séparateurs


16
2017-09-30 08:53