traduccion - #pragma marca en Swift?




swift traduccion (12)

Documentación

Documento oficial de Apple sobre la Barra de salto de Xcode: agregar anotaciones de código a la barra de salto

Vistas previas

Código - Swift 4.2

Barra de salto - Xcode 10.0

NOTA

!!!: y ???: parece que ya no se admite como en Xcode 9.4.1.

Barra de salto - Xcode 9.4.1

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


Agregar una tarea a realizar: inserte un comentario con el prefijo TODO :. Por ejemplo: // TODO: [su tarea pendiente].

Agregue un recordatorio de corrección de errores: inserte un comentario con el prefijo FIXME :. Por ejemplo: // FIXME: [su recordatorio de corrección de errores].

Agregue un encabezado: inserte un comentario con el prefijo MARK :. Por ejemplo: // MARCA: [encabezado de la sección].

Agregar una línea de separación: Para agregar un separador sobre una anotación, agregue un guión (-) antes de la parte de comentario de la anotación. Por ejemplo: // MARK: - [su contenido]. Para agregar un separador debajo de una anotación, agregue un guión (-) después de la parte de comentario de la anotación. Por ejemplo: // MARK: [su contenido] -.


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

De todos modos, está en camino.

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


Creo que Extensions es una forma mejor 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) {
       ...
    }
}

En el código de 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?).

Edición: Corregido en Xcode 6 beta 4.


Hasta Xcode 5, existía la directiva de preprocesador #pragma mark .

A partir de Xcode 6, tienes que usar // MARK:

Estas características del preprocesador permiten aportar cierta 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 agregada porque algunas personas aún parecen tener problemas con esto:


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

}

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


Puedes usar // MARK:

También se ha discutido que el uso liberal de las extensiones de clase podría ser una mejor práctica de todos modos. Dado que las extensiones pueden implementar protocolos, puede, por ejemplo, poner todos los métodos de delegado de la vista de tabla en una extensión y agrupar su código en un nivel más semántico del que no es capaz de #pragma mark .


Utilizar

// MARK: SectionName

o

// MARK: - SectionName

Esto le dará una línea sobre la marca de pragma, haciéndola más legible.

Para mayor facilidad simplemente agregue

// MARK: - <#label#>

a sus fragmentos de código.

Vía alternativa

Úsalo de esta manera

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

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


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


Pragma mark - [SOME TEXT HERE] se usó en Objective-C para agrupar varias funciones por separación de líneas.

En Swift puedes lograr esto usando MARK, TODO OR FIXME

yo. MARK: //MARK: viewDidLoad

Esto creará una línea horizontal con funciones agrupadas bajo viewDidLoad (que se muestra en la captura de pantalla 1)

ii. TODO: //TODO: - viewDidLoad

Esto agrupará la función en TODO: - viewDidLoad category (se muestra en la captura de pantalla 2)

iii. FIXME: //FIXME - viewDidLoad

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


//# MARK: - Spinner Class Methods

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

  1. // # MARK: - Métodos de texto (LINE)
  2. // # MARCA: Métodos de texto (NO LINE)

Esto solo funciona con el comentario de MARK.





swift