Pregunta #pragma mark en Swift?


En Objective C, puedo usar #pragma mark para marcar secciones de mi código en el navegador de símbolos. Como este es un comando de preprocesador C, no está disponible en Swift. ¿Hay un sustituto para esto en Swift, o tengo que usar comentarios desagradables?


799
2018-06-03 14:05


origen


Respuestas:


Puedes usar // MARK:


Histórico, antes de Xcode 6 Beta 4

Acabo de hablar con un ingeniero aquí en la WWDC, y la versión beta actual de Xcode no implementa el

// MARK: 

estilo todavía, pero me dijeron que las versiones futuras lo harán.

También se sugirió que hacer un uso liberal de las extensiones de clase podría ser una mejor práctica de todos modos. Como las extensiones pueden implementar protocolos, puede p. Ej. ponga todos sus métodos delegados de vista de tabla en una extensión y agrupe su código en un nivel más semántico que #pragma mark es capaz de.


1002
2018-06-04 12:46



Para aquellos que estén interesados ​​en usar extensiones vs pragma marks (como se menciona en el primer comentario), aquí se explica cómo implementarlo desde 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
    }

}

Tampoco es necesariamente la mejor práctica, pero así es como lo haces si quieres.


156
2018-06-05 20:00



Hasta Xcode 5 la directiva de preprocesador #pragma mark existió.

Desde Xcode 6 en adelante, debes usar // MARK:

Estas características del preprocesador permiten llevar algo de estructura al cuadro desplegable de funciones del editor de código fuente.

algunos ejemplos :

// MARK:

-> irá precedido por un divisor horizontal

// MARK: your text goes here

-> pone 'su texto va aquí' en negrita en la lista desplegable

// MARK: - your text goes here

-> pone 'su texto va aquí' en negrita en la lista desplegable, precedido por un divisor horizontal

actualización: captura de pantalla añadida porque algunas personas todavía parecen tener problemas con esto:

enter image description here


152
2017-10-16 15:49



Pragma mark - [SOME TEXT HERE] fue utilizado en Objective-C para agrupar varias funciones juntas por separación de línea.

En Rápido puedes lograr esto usando MARK, TODO OR FIXME

yo. MARCA :  //MARK: viewDidLoad 

Esto creará un linea horizontal con funciones agrupadas en viewDidLoad (se muestra en la captura de pantalla 1)

Screenshot 1

ii. QUE HACER :  //TODO: - viewDidLoad

Esto agrupará la función bajo TODO: - viewDidLoad categoría (que se muestra en la captura de pantalla 2)

Screenshot 2

iii. ARREGLARME :  //FIXME - viewDidLoad 

Esto agrupará la función bajo ARREGLO: - viewDidLoad categoría (se muestra en la captura de pantalla 3)

Screenshot 3


100
2017-10-09 13:52



En código Objective-C, Xcode detecta comentarios como // MARK: - foo que es un poco más portátil que #pragma. Pero estos no parecen ser recogidos, también (todavía?).

Editar: solucionado en Xcode 6 beta 4.


53
2018-06-03 14:12



creo Extensions es una mejor manera en lugar de #pragma mark.

El código antes de usar 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) {
        ...
    }
}

El código después de usar 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



Confirmado con un ingeniero de Apple en el laboratorio Swift esta mañana en WWDC que actualmente no hay ningún pragma o equivalente en este momento, lo consideran un error, y llegará pronto, así que supongo que la beta 2, espero.

De todos modos, está en camino.


Xcode ahora es compatible con // MARK :, // TODO: y // puntos de referencia de FIXME para anotar su código y los enumera en la barra de salto


31
2018-06-06 21:58



Xcode 8 ahora lo maneja como sigue y se muestra así en el menú desplegable del método:

enter image description here


30
2018-06-17 00:25



Utilizar

// MARK: SectionName

o

// MARK: - SectionName

Esto dará una línea por encima de pragma mark, haciéndolo más legible.

Para mayor facilidad solo agrega

// MARK: - <#label#>

a tus fragmentos de código

Manera alternativa -

Úselo de esta manera

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

Esto no solo agregará una marca (al igual que pragma mark) sino que también segregará el código muy bien.


16
2017-11-21 10:54



Hay tres opciones para agregar #pragma_mark en Swift:

1) // MARK: - your text here -

2) // TODO: - your text here -

3) // FIXME: - your text here -

Nota: Usos - para agregar separadores


16
2017-09-30 08:53



//# MARK: - Spinner Class Methods

Agregue una línea entre los dos puntos y su descripción para insertar una línea de separación. Esto ayuda a organizar su código aún más. El código y la captura de pantalla de arriba usan el comentario de MARK con una línea incluida.

  1. // # MARK: - Métodos de texto (LINE)
  2. // # MARK: Métodos de texto (SIN LÍNEA)

Esto solo funciona con el comentario de MARK.

enter image description here


13
2018-02-29 09:35