У Цілі C я можу використовувати #pragma mark
для позначення розділів свого коду в навігаторі символів. Оскільки це команда препроцесора C, вона не доступна в Swift. Чи є в цьому тему "Свіфт", або мені потрібно використовувати некрасиві коментарі?
У Цілі C я можу використовувати #pragma mark
для позначення розділів свого коду в навігаторі символів. Оскільки це команда препроцесора C, вона не доступна в Swift. Чи є в цьому тему "Свіфт", або мені потрібно використовувати некрасиві коментарі?
Відповіді:
Можна використовувати // MARK:
Також було обговорено, що ліберальне використання розширень класів може бути кращою практикою. Оскільки розширення можуть реалізовувати протоколи, ви можете, наприклад, розмістити всі методи делегації подання таблиці в розширенні та згрупувати свій код на більш семантичному рівні, ніж #pragma mark
це можливо.
// MARK:
, // TODO:
а // FIXME
у джерелі Swift і перелічує їх у стрибковій панелі. (До речі, це вже було в (Obj) C джерелі - #pragma mark
це не єдиний спосіб.) І так, ви все одно можете додати -
до свого, MARK
щоб розмістити роздільники в меню.
MARK
працюючи зараз, використання розширень для групування деяких видів семантично пов'язаного коду (особливо реалізацій протоколу) все ще може бути корисним. IMHO це читає набагато краще, щоб ваша декларація про відповідність протоколу була поруч із методами, які її реалізують, а не 5 декларацій протоколу у верхній частині файлу та 50 відповідних реалізацій методів, випадковим чином розкиданих десь внизу.
#pragma mark
. // MARK: -
це просто роздільник, // MARK: - stuff
дає вам роздільник і заголовок, а також // MARK: - stuff -
дає роздільник, заголовок та інший роздільник у одному рядку коментарів.
До Xcode 5 #pragma mark
існувала директива препроцесора .
Від Xcode 6 ви повинні користуватися // MARK:
Ці функції препроцесора дозволяють наблизити деяку структуру до випадаючого меню редактора вихідного коду.
кілька прикладів:
// MARK:
-> передуватиме горизонтальний роздільник
// MARK: your text goes here
-> ставить «ваш текст сюди» жирним шрифтом у спадному списку
// MARK: - your text goes here
-> ставить «ваш текст йде сюди» жирним шрифтом у спадному списку, перед яким горизонтальний роздільник
оновлення: додано скріншот, тому що деякі люди все ще мають проблеми з цим:
// MARK: - text
для мене, і в розкритому списку відображається MARK: текст замість просто тексту .
Для тих, хто зацікавлений у використанні розширень проти прагматичних знаків (як уже згадувалося в першому коментарі), ось як реалізувати це від 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
}
}
Це також не обов'язково найкраща практика, але це так, як ви це робите, якщо хочете.
typealias
. Наприклад typealias DataSource = SwiftTableViewController
. Потімextension Datasource {}
UITableViewController
- це не протокол, це клас. Ви, мабуть, маєте на увазі UITableViewControllerDataSource
, але це не той шаблон, який використовується в прикладі.
extension
отримали заголовок з протоколом, наприклад extension SwiftTableViewController : UITableViewController
, було б читабельніше зрозуміти, чому ви додали це розширення до класу.
extension SwiftTableViewController : UITableViewDelegate { .. }
таextension SwiftTableViewController : UITableViewDatasource { .. }
Pragma mark - [SOME TEXT HERE]
було використано в Objective-C для об'єднання декількох функцій разом шляхом розділення рядків.
У Swift ви можете досягти цього за допомогоюMARK, TODO OR FIXME
i. ОЗНАКА: //MARK: viewDidLoad
Це створить горизонтальну лінію з функціями, згрупованими під viewDidLoad (показано на знімку 1)
ii. ЗРОБИТИ : //TODO: - viewDidLoad
Ця група буде функціонувати під TODO: - категорія viewDidLoad (показана на знімку 2)
iii. ВИПРАВИТИ МЕНЕ : //FIXME - viewDidLoad
Ця група буде функціонувати під FIXME: - категорія viewDidLoad (показана на скріншоті 3)
Перегляньте цю документацію щодо яблук на деталі.
Офіційний документ Apple про панель стрибків Xcode: додайте анотації до коду на панелі стрибків
!!!:
а ???:
іноді неможливо відобразити.
У коді Objective-C Xcode виявляє коментарі на зразок, // MARK: - foo
який трохи більш портативний, ніж #pragma
. Але вони теж не здаються (все-таки?).
Редагувати: виправлено в Xcode 6 beta 4.
// MARK: -
наразі це не працює.
// MARK:
, здається, не працює. Я намагався з & без місця, з двокрапкою та без, з усією кришкою та змішаною (Марк). Чи є хитрість? Чи потрібно активувати попередній запис чи щось таке?
Я думаю 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) {
...
}
}
extension
поодинці насправді не виділяється у спадному меню керування сухарями Xcode.
// ARK:
на мене в Xcode 8
!!!
І ???
синтаксис як видається , не працюватиме на Xcode 8.3.3 ...
Сьогодні вранці в лабораторії Swift в WWDC, підтверджений інженером Apple, інженер Apple, що зараз немає жодної #прагми або еквівалента, вони вважають це помилкою, і він незабаром з’явиться, тому я думаю, що бета-2 я сподіваюся.
У всякому разі, це на шляху.
Тепер Xcode підтримує // MARK :, // TODO: і // FIXME орієнтири для анотування коду та перерахування їх на панелі стрибків
Використовуйте
// MARK: SectionName
або
// MARK: - SectionName
Це дасть лінію вище позначки прагми, зробивши її більш зрозумілою.
Для зручності просто додайте
// MARK: - <#label#>
до фрагментів вашого коду.
Альтернативний спосіб -
Використовуйте його таким чином
private typealias SectionName = ViewController
private extension SectionName {
// Your methods
}
Це не тільки додасть позначку (як і прагма-позначка), але й добре відокремить код.
//MARK
формат (немає пробілу) та запропонує // MARK: (text)
( один пробіл між //
і MARK, немає пробілу між MARK
і :
та один пробіл між :
і назвою розділу)
//# MARK: - Spinner Class Methods
Додайте рядок між двокрапкою та описом, щоб вставити розділову лінію. Це допомагає ще більше впорядкувати свій код. У коді та скріншоті вище використовується коментар MARK із доданим рядком.
Це працює лише з коментарем MARK.
Можливо, вас також зацікавлять такі директиви компілятора Swift 4.2 / XCode 10
#warning("Some string to display")
і
#error("Some error to display")
Це може бути корисно, коли ви дійсно не хочете щось пропустити.
Професійний програміст повинен використовувати цей тег для хорошого коду. Це також добре для роботи в команді.
// MARK: example Web Service start here
// TODO: example 1
// FIXME: Please change BASE url before live
Легко знайти такий спосіб
У Xcode 11 вони додали мінімапу, яку можна активувати Editor -> Minimap
.
Мінімапа покаже кожен текст позначки для швидкої орієнтації в коді. Кожна позначка пишеться як би// MARK: Variables
//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)
стати найправішим записом у стрибковій панелі, я повинен натиснути пробіл вище своїх методів.
Apple заявляє в останній версії Build Cocoa Apps ,
Компілятор Swift не включає препроцесора. Натомість для отримання тієї ж функціональності використовується переваги атрибутів часу компіляції, побудови конфігурацій та мовних функцій. З цієї причини директиви препроцесора не імпортуються в Swift.
Здається, що символ # як і раніше працює з різними конфігураціями побудови та подібними речами, але, схоже, вони намагаються обмежити вашу потребу в більшості попередньої обробки в жилах прагми і передати вас взагалі до інших мовних особливостей. Можливо, це допоможе в роботі ігрових майданчиків і REPL поводиться максимально наближеним до повністю складеного коду.
Додати елемент завдання: Вставте коментар із префіксом TODO :. Наприклад: // TODO: [ваш предмет завдання].
Додати нагадування про виправлення помилок: Вставте коментар із префіксом FIXME :. Наприклад: // FIXME: [нагадування про виправлення помилок].
Додайте заголовок: Вставте коментар із префіксом MARK :. Наприклад: // MARK: [заголовок вашого розділу].
Додати рядок розділення: Щоб додати роздільник над приміткою, додайте дефіс (-) перед частиною коментаря до примітки. Наприклад: // МАРКА: - [ваш вміст]. Щоб додати роздільник під приміткою, додайте дефіс (-) після частини коментаря до примітки. Наприклад: // МАРКА: [ваш вміст] -.
Спробуйте це:
// MARK: Reload TableView
func reloadTableView(){
tableView.reload()
}
Прагматичний знак - це спосіб поліпшити читабельність вашого коду. Зауваження до прагми з’являться як теги на панелі стрибків Xcode.
//MARK: <Your comment goes here>
Приклад: у коді
//MARK: Properties
// MARK: View Life cycle
//MARK: Helper methods
Ось як це виглядатиме на панелі стрибків Xcode.