suzuki - swift lenguaje
#pragma marca en Swift? (17)
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] -.
Apple afirma en la última versión de Building Cocoa Apps ,
El compilador Swift no incluye un preprocesador. En su lugar, aprovecha los atributos de tiempo de compilación, las configuraciones de compilación y las características de lenguaje para lograr la misma funcionalidad. Por esta razón, las directivas de preprocesador no se importan en Swift.
El carácter # parece seguir siendo tu forma de trabajar con varias configuraciones de compilación y cosas así, pero parece que están intentando reducir tu necesidad de la mayoría de los preprocesamientos en la vena de Pragma y reenviarte a otras funciones lingüísticas. Quizás esto sea para ayudar en la operación de los Parques de Recreo y el REPL comportándose lo más cerca posible del código completamente compilado.
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:
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
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.
//MARK:
no parece funcionar para mí en Xcode 6.3.2. Sin embargo, esto es lo que hice para que funcione :
1) Código:
import Cocoa
class MainWindowController: NSWindowController {
//MARK: - My cool methods
func fly() {
}
func turnInvisible() {
}
}
2) En la jump bar
nada parece cambiar cuando se agrega el //MARK
: comentario. Sin embargo, si hago clic en el nombre que se encuentra más a la derecha en la barra de salto, en mi caso dice MainWindowController(with a leading C icon)
, aparecerá una ventana emergente que muestra los efectos del // MARK: comentario, es decir, un encabezado que dice "Mis métodos geniales":
3) También me doy cuenta de que si hago clic en uno de los métodos en mi código, entonces el método se convierte en la entrada más a la derecha en la barra de salto. Para que MainWindowController(with a leading C icon)
en la parte superior MainWindowController(with a leading C icon)
sea la entrada más a la derecha en la barra de salto, tengo que hacer clic en el espacio en blanco sobre mis 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.
- // # MARK: - Métodos de texto (LINE)
- // # MARCA: Métodos de texto (NO LINE)
Esto solo funciona con el comentario de MARK.