# прагма в Swift?
В Objective C я могу использовать #pragma mark
для обозначения разделов моего кода в навигаторе символов. Поскольку это команда препроцессора C, она недоступна в Swift. Есть ли в Swift возможность для этого, или мне нужно использовать уродливые комментарии?
Ответы
Ответ 1
Вы можете использовать //MARK:
Также было обсуждение, что либеральное использование расширений классов могло бы быть лучшей практикой в любом случае. Поскольку расширения могут реализовывать протоколы, вы можете, например, поместить все методы делегата табличного представления в расширение и сгруппировать свой код на более семантическом уровне, чем способный #pragma mark
.
Ответ 2
Для тех, кто заинтересован в использовании расширений vs pragma marks (как упоминалось в первом комментарии), вот как реализовать его у 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
}
}
Это также не обязательно лучшая практика, но это то, как вы это делаете, если хотите.
Ответ 3
До Xcode 5 существовала препроцессорная директива #pragma mark
.
Из Xcode 6 on вы должны использовать // MARK:
Эти функции препроцессора позволяют принести некоторую структуру в раскрывающееся окно функции редактора исходного кода.
несколько примеров:
// MARK:
- > будет предшествовать горизонтальный делитель
// MARK: your text goes here
- > помещает 'ваш текст идет здесь' выделен жирным шрифтом в выпадающем списке
// MARK: - your text goes here
- > помещает 'ваш текст идет здесь' выделен жирным шрифтом в выпадающем списке, которому предшествует горизонтальный разделитель
update: добавлен снимок экрана, потому что у некоторых людей по-прежнему возникают проблемы с этим:
Ответ 4
Pragma mark - [SOME TEXT HERE]
использовался в Objective-C для группировки нескольких функций путем разделения строк.
В Swift вы можете достичь этого, используя MARK, TODO OR FIXME
я. MARK: //MARK: viewDidLoad
Это создаст горизонтальную линию с функциями, сгруппированными под viewDidLoad (показано на снимке 1)
II. TODO: //TODO: - viewDidLoad
Это будет группировать функцию в категории TODO: - viewDidLoad (показано на скриншоте 2)
III. FIXME: //FIXME - viewDidLoad
Это будет группировать функцию в категории FIXME: - viewDidLoad (показано на скриншоте 3)
Ответ 5
В Objective-C код Xcode обнаруживает такие комментарии, как // MARK: - foo
, который немного переносится, чем #pragma
. Но, похоже, они тоже не подобраны (пока?).
Изменить: Исправлено в Xcode 6 beta 4.
Ответ 6
Официальная документация
Официальный документ Apple о панели переходов Xcode: добавление аннотаций кода в панель переходов
Скриншоты Jump Bar для примера кода
Поведение в Xcode 10.1 и macOS 10.14.3 (Мохаве)
Поведение в Xcode 10.0 и macOS 10.13.4 (High Sierra)
Поведение в Xcode 9.4.1 и macOS 10.13.0
обсуждение
!!!:
и ???:
иногда не могут отображаться.
Ответ 7
Я думаю, Extensions
- лучший способ вместо #pragma mark
.
Код перед использованием 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) {
...
}
}
Код после использования 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) {
...
}
}
Ответ 8
Теперь Xcode 8 обрабатывает его, как показано ниже, и отображается в раскрывающемся списке метода:
Ответ 9
Подтвержденный инженером Apple в лаборатории Swift сегодня утром в WWDC, что в настоящее время в нем нет какой-либо # прагмы или эквивалента, они считают эту ошибку, и она скоро появится, поэтому я предполагаю, что бета 2, Надеюсь.
В любом случае, это на этом пути.
Xcode теперь поддерживает //MARK:,//TODO: и//FIXME ориентиры, чтобы комментировать ваш код и
перечисляет их в панели перехода
Ответ 10
Есть три варианта добавления #pragma_mark
в Swift:
1) // MARK: - your text here -
2) // TODO: - your text here -
3) // FIXME: - your text here -
Примечание. Использует -
для добавления разделителей
Ответ 11
Использование
// MARK: SectionName
или
// MARK: - SectionName
Это даст строку над значком прагмы, что сделает ее более читаемой.
Для простоты просто добавьте
// MARK: - <#label#>
к вашим фрагментам кода.
Альтернативный способ -
Используйте его таким образом
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
Это не только добавит отметку (как и прагма-метку), но и разделит код.
Ответ 12
//# MARK: - Spinner Class Methods
Добавьте строку между двоеточием и вашим описанием, чтобы вставить строку разделителя. Это помогает организовать код еще больше. В приведенном выше коде и скриншоте используется комментарий MARK с включенной линией.
- //# MARK: - Текстовые методы (LINE)
- //# MARK: текстовые методы (NO LINE)
Это работает только с комментарием MARK.
Ответ 13
Вы также можете быть заинтересованы в директивах компилятора Swift 4.2/XCode 10, таких как
#warning("Some string to display")
а также
#error("Some error to display")
Это может быть полезно, когда вы действительно не хотите что-то пропустить.
Ответ 14
Профессиональный программист должен использовать этот тег для хорошего кода. Это также хорошо для командной работы.
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
Подобный метод легко найти
Ответ 15
//MARK:
не работает для меня в Xcode 6.3.2. Однако это то, что я сделал, чтобы заставить его работать:
1) Код:
import Cocoa
class MainWindowController: NSWindowController {
//MARK: - My cool methods
func fly() {
}
func turnInvisible() {
}
}
2) В jump bar
ничего не меняется при добавлении комментария //MARK
:. Однако, если я нажимаю на самое правое имя в панели перехода, в моем случае он говорит MainWindowController(with a leading C icon)
, тогда появится всплывающее окно, показывающее эффекты //MARK: comment, а именно заголовок, который гласит: "Мои классные методы",
3) Я также замечаю, что если я нажму на один из методов в моем коде, то метод станет самой правой записью в панели перехода. Чтобы получить MainWindowController(with a leading C icon)
как самую правую запись в панели перехода, я должен щелкнуть пробел над моими методами.
Ответ 16
Apple заявляет в последней версии Building Cocoa Apps,
Компилятор Swift не включает препроцессор. Вместо этого требуется преимущество атрибутов компиляции, построение конфигураций и чтобы реализовать ту же функциональность. Для этого причина, директивы препроцессора не импортируются в Swift.
Символ # по-прежнему остается тем, как вы работаете с различными конфигурациями сборки и т.д., но похоже, что они пытаются сократить вашу потребность в большей части предварительной обработки в духе прагмы и перенаправить вас на другой язык функции вообще. Возможно, это поможет в работе игровых площадок и REPL, как можно ближе к полностью скомпилированному коду.
Ответ 17
В Xcode 11 они добавили миникарту, которую можно активировать Editor -> Minimap
.
Мини-карта покажет каждый текст пометки для быстрой ориентации в коде.
Каждый знак написан как // MARK: Variables
Ответ 18
Добавить элемент списка дел: вставить комментарий с префиксом TODO :. Например://TODO: [ваш список дел].
Добавьте напоминание об исправлении ошибки: вставьте комментарий с префиксом FIXME :. Например://FIXME: [ваше напоминание об исправлении ошибки].
Добавить заголовок: Вставить комментарий с префиксом MARK :. Например://MARK: [заголовок вашего раздела].
Добавить разделительную линию. Чтобы добавить разделитель над аннотацией, добавьте дефис (-) перед частью комментария к аннотации. Например://MARK: - [ваш контент]. Чтобы добавить разделитель ниже аннотации, добавьте дефис (-) после части комментария аннотации. Например://MARK: [ваш контент] -.
Ответ 19
Проверьте изображение для более подробной информации, я попытался объяснить все в моем коде.
Ответ 20
Попробуй это:
// MARK: Reload TableView
func reloadTableView(){
tableView.reload()
}
Ответ 21
Вы можете использовать // MARK:
и // MARK:-
быстро. Второй вариант добавляет разделительную линию.
Ответ 22
Прагма - это способ улучшить читабельность вашего кода. Комментарии прагмы выглядят как теги на панели переходов Xcode.
//MARK: <Your comment goes here>
Пример: в коде
//MARK: Properties
// MARK: View Life cycle
//MARK: Helper methods
Вот как это будет выглядеть в панели переходов Xcode.