marks - # прагма в Swift?




xcode marks (12)

Документация

Официальный документ Apple о панели перехода Xcode: добавьте аннотации кода в панель перехода

Предыдущий

Код - Swift 4.2

Панель перехода - Xcode 10.0

НОТА

!!!: и ???: похоже, больше не поддерживаются, как в Xcode 9.4.1.

Панель перехода - Xcode 9.4.1

В Objective C я могу использовать #pragma mark для обозначения разделов моего кода в навигаторе символов. Поскольку это команда препроцессора C, она недоступна в Swift. Есть ли в Swift возможность для этого, или мне нужно использовать уродливые комментарии?


Apple заявляет, что в последней версии Building Cocoa Apps ,

Компилятор Swift не включает препроцессор. Вместо этого он использует преимущества атрибутов компиляции, конфигурации сборки и языковых функций для выполнения той же функциональности. По этой причине директивы препроцессора не импортируются в Swift.

Символу # по-прежнему остается то, как вы работаете с различными конфигурациями сборки и т. Д., Но похоже, что они пытаются сократить вашу потребность в большей части предварительной обработки в духе прагмы и перенаправить вас на другие языковые функции. Возможно, это поможет в работе игровых площадок и REPL, как можно ближе к полностью скомпилированному коду.


Вы можете использовать // MARK:

Также обсуждалось, что либеральное использование расширений классов может быть лучшей практикой в ​​любом случае. Поскольку расширения могут реализовывать протоколы, вы можете, например, поместить все методы делегирования представления таблиц в расширение и сгруппировать свой код на более семантическом уровне, чем может использовать #pragma mark .


Вы также можете быть заинтересованы в директивах компилятора Swift 4.2 / XCode 10, таких как

#warning("Some string to display")

а также

#error("Some error to display")

Это может быть полезно, когда вы действительно не хотите что-то пропустить.


До Xcode 5 существовал символ препроцессора #pragma mark .

Начиная с Xcode 6, вы должны использовать // MARK:

Эти функции препроцессора позволяют привести некоторую структуру в раскрывающееся окно функции редактора исходного кода.

Некоторые примеры :

// MARK:

-> будет предшествовать горизонтальный делитель

// MARK: your text goes here

-> помещает 'ваш текст идет здесь' выделен жирным шрифтом в выпадающем списке

// MARK: - your text goes here

-> помещает 'ваш текст идет здесь' выделен жирным шрифтом в выпадающем списке, которому предшествует горизонтальный делитель

обновление: добавлен снимок экрана, потому что некоторые люди по-прежнему имеют проблемы с этим:


Добавить объект: добавьте комментарий с префиксом TODO :. Например: // TODO: [ваш предмет дел].

Добавьте напоминание об исправлении ошибок: вставьте комментарий с префиксом FIXME :. Например: // FIXME: [ваше напоминание об исправлении ошибок].

Добавить заголовок: Вставить комментарий с префиксом MARK :. Например: // MARK: [заголовок раздела].

Добавьте разделительную линию: чтобы добавить разделитель над аннотацией, добавьте дефис (-) перед комментарием части аннотации. Например: // MARK: - [ваш контент]. Чтобы добавить разделитель под аннотацией, добавьте дефис (-) после комментария в аннотации. Например: // MARK: [ваш контент] -.


Профессиональный программист должен использовать этот тег для хорошего кода. Это также хорошо для командной работы.

// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live 


Сегодня утром в WWDC, подтвержденном инженером Apple в лаборатории Swift, в настоящее время нет какой-либо # прагмы или эквивалента, они считают эту ошибку, и она скоро прибудет, поэтому я предполагаю, что бета-2, надеюсь.

Во всяком случае, так оно и есть.

Xcode теперь поддерживает // MARK :, // TODO: и // FIXME ориентиры для аннотирования кода и перечисления их в панели перехода


Я думаю, что 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) {
       ...
    }
}

использование

// MARK: SectionName

или же

// MARK: - SectionName

Это даст линию над прагма-маркой, что сделает ее более читаемой.

Для простоты просто добавьте

// MARK: - <#label#>

к вашим фрагментам кода.

Альтернативный путь -

Используйте его таким образом

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

Это не только добавит отметку (как и прагма-марку), но и разделит код.


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)


//# MARK: - Spinner Class Methods

Добавьте строку между двоеточием и вашим описанием, чтобы вставить разделительную линию. Это помогает организовать код еще больше. В приведенном выше коде и скриншоте используется комментарий MARK с включенной линией.

  1. // # MARK: - Текстовые методы (LINE)
  2. // # MARK: текстовые методы (NO LINE)

Это работает только с комментарием MARK.





swift