Чи має у Swift підтримка генерації документації?


238

Багато мов підтримують коментарі документації, щоб дозволити генератору (наприклад, javadocабо доксигену ) генерувати кодову документацію шляхом аналізу того самого коду.

Чи має Swift якусь функцію коментування документації типу такої?


Знаючи, що Xcode з target-c дозволяє коментувати документацію, я вважаю, що Apple найближчим часом додасть цю опцію до Xcode зі швидким (однак, це лише припущення, у мене немає доказів)
Garoal

@ Δdeveloper Я припускав те саме, але, оскільки я не бачив жодної посилання, мені було цікаво, чи хтось може це підтвердити, а також чи буде якийсь певний інструмент для документації.
pconcepcion

1
Вони обов'язково додадуть щось у майбутньому, // MARK:коментар також запланований для майбутньої версії Xcode.
Леандрос

Доксигенський стиль коментує роботу над класовими методами, з ~ кількома ~ МНОГО ЗАстережень. Я для одного просто продовжуватиму використовувати стиль Doxygen (як я це робив для Obj-C) і сподіваюся, що Xcode покращує його підтримку.
Паскаль

1
Документування параметрів блоку див. У статті stackoverflow.com/a/41970146/1054573
Леонард Паулі

Відповіді:


386

Зауваження щодо документації підтримуються в Xcode, створюючи продуману документацію в Швидкій довідці (як у переході при натисканні символів, так і в Інспекторі швидкої допомоги ⌥⌘2).

Зауваження щодо документації на символи тепер базуються на тому самому синтаксисі Markdown, який використовується у коментарях до багатих майданчиків, тому багато з того, що ви можете зробити на ігрових майданчиках, тепер можна використовувати безпосередньо у документації на вихідний код.

Щоб отримати докладні відомості про синтаксис, див. Довідку щодо форматування розмітки . Зауважте, що існують деякі розбіжності між синтаксисом багатих коментарів до ігрової майданчика та документацією на символи; вони вказані в документі (наприклад, котирування блоків можна використовувати лише на ігрових майданчиках).

Нижче наводиться приклад та список елементів синтаксису, які наразі працюють для коментарів із документацією до символів.


Оновлення

Xcode 7 beta 4 ~ Додано " - Throws: ..." як елемент списку верхнього рівня, який відображається поряд із параметрами та описом повернення у Швидкій довідці.

Xcode 7 beta 1 ~ Деякі суттєві зміни в синтаксисі з Swift 2 - коментарі до документації, що базуються на Markdown (те саме, що і дитячі майданчики).

Xcode 6.3 (6D570) ~ Текст з відступом тепер форматується у вигляді кодових блоків, а наступні відступи вкладаються. Здається, не можна залишати порожній рядок у такому блоці коду - намагаючись це зробити, це призводить до того, що текст буде вставлений на кінець останнього рядка з будь-якими символами в ньому.

Xcode 6.3 beta ~ Вбудований код тепер можна додавати до коментарів до документації за допомогою зворотних посилань.


Приклад для Swift 2

/// Text like this appears in "Description".
///
/// Leave a blank line to separate further text into paragraphs.
///
/// You can use bulleted lists (use `-`, `+` or `*`):
///
/// - Text can be _emphasised_
/// - Or **strong**
///
/// Or numbered lists:
///
/// 7. The numbers you use make no difference
/// 0. The list will still be ordered, starting from 1
/// 5. But be sensible and just use 1, 2, 3 etc…
///
/// ---
///
/// More Stuff
/// ==========
///
/// Code
/// ----
///
/// Use backticks for inline `code()`. Indentations of 4 spaces or more will create a code block, handy for example usage:
///
///     // Create an integer, and do nothing with it
///     let myInt = 42
///     doNothing(myInt)
///
///     // Also notice that code blocks scroll horizontally instead of wrapping.
///
/// Links & Images
/// --------------
///
/// Include [links](https://en.wikipedia.org/wiki/Hyperlink), and even images:
///
/// ![Swift Logo](/Users/Stuart/Downloads/swift.png "The logo for the Swift programming language")
///
/// - note: That "Note:" is written in bold.
/// - requires: A basic understanding of Markdown.
/// - seealso: `Error`, for a description of the errors that can be thrown.
///
/// - parameters:
///   - int: A pointless `Int` parameter.
///   - bool: This `Bool` isn't used, but its default value is `false` anyway…
/// - throws: A `BadLuck` error, if you're unlucky.
/// - returns: Nothing useful.
func doNothing(int: Int, bool: Bool = false) throws -> String {
    if unlucky { throw Error.BadLuck }
    return "Totally contrived."
}

Швидка довідка швидкої документації


Синтаксис для Swift 2 (на основі Markdown )


Стиль коментарів

Обидва ///(рядний) і /** */коментарі (блок) стиль підтримуються для отримання коментарів документації. Хоча я особисто віддаю перевагу візуальному стилю /** */коментарів, автоматичне відступ Xcode може зруйнувати форматування цього стилю коментарів при копіюванні / вставці, оскільки він видаляє провідну пробіл. Наприклад:

/**
See sample usage:

    let x = method(blah)
*/

Під час вставлення відступ блоку коду видаляється і він більше не видається як код:

/**
See sample usage:

let x = method(blah)
*/

З цієї причини я, як правило, використовую ///і використовую його для решти прикладів у цій відповіді.


Блокові елементи

Заголовок:

/// # My Heading

або

/// My Heading
/// ==========


Підзаголовок:

/// ## My Subheading

або

/// My Subheading
/// -------------


Правило по горизонталі:

/// ---


Не упорядковані (марковані) списки:

/// - An item
/// - Another item

Ви також можете використовувати +або *для упорядкованих списків, це просто має бути послідовним.


Впорядковані (пронумеровані) списки:

/// 1. Item 1
/// 2. Item 2
/// 3. Item 3


Кодові блоки:

///    for item in array {
///        print(item)
///    }

Необхідний відступ принаймні чотирьох пробілів.


Вбудовані елементи

Наголос (курсив):

/// Add like *this*, or like _this_.


Сильний (жирний):

/// You can **really** make text __strong__.

Зауважте, що ви не можете змішувати зірочки ( *) та підкреслення ( _) на одному елементі.


Вбудований код:

/// Call `exampleMethod(_:)` to demonstrate inline code.


Посилання:

/// [Link Text](https://en.wikipedia.org/wiki/Hyperlink)


Зображення:

/// ![Alt Text](http://www.example.com/alt-image.jpg)

URL може бути або веб-URL-адресою (використовуючи "http: //"), або абсолютною URL-адресою файлу (я не можу отримати відносні шляхи до файлу до роботи).

URL-адреси посилань та зображень також можна відокремити від елемента вбудованого, щоб зберегти всі URL-адреси в одному, керованому місці:

/// A [link][1] an an ![image][2]
///
/// ...
///
/// [1]: http://www.example.com
/// [2]: http://www.example.com/image.jpg


Ключові слова

На додаток до форматування Markdown, Xcode розпізнає інші ключові слова для розмітки, які відображатимуться у Швидкій довідці. Ці ключові слова розмітки здебільшого приймають формат - <keyword>:(виняток - parameterце також ім'я параметра перед двокрапкою), де саме ключове слово можна записати з будь-якою комбінацією великих / малих символів.

Ключові слова розділ символу

Наступні ключові слова відображаються як помітні розділи у переглядачі довідки, під розділом "Опис" та над розділом "Задекларовано в". Якщо вони включені, їх порядок фіксується як показано нижче, навіть якщо ви можете включити їх у будь-якому порядку, який вам подобається у ваших коментарях.

Дивіться повністю задокументований перелік ключових слів розділу та їх використання за призначенням у розділі Команди розділу символів у Довідці про форматування розмітки .

/// - parameters:
///   - <#parameter name#>:
///   - <#parameter name#>:
/// - throws:
/// - returns:

Крім того, ви можете записати кожен параметр таким чином:

/// - parameter <#parameter name#>:

Символ Опис Ключові слова поля

Наступний список ключових слів відображається у вигляді жирних заголовків у тілі розділу "Опис" переглядача довідки. Вони з’являться в будь-якому порядку, в якому ви їх записуєте, як і в решті розділу «Опис».

Повний список перефразований із цієї чудової статті блогу Еріки Садун. Також дивіться повністю задокументований перелік ключових слів та їх призначення за призначенням у розділі Команди поля Опис поля в Довідці щодо форматування розмітки .

Атрибути:

/// - author:
/// - authors:
/// - copyright:
/// - date:

Наявність:

/// - since:
/// - version:

Застереження:

/// - attention:
/// - important:
/// - note:
/// - remark:
/// - warning:

Стан розвитку:

/// - bug:
/// - todo:
/// - experiment:

Якість впровадження:

/// - complexity:

Функціональна семантика:

/// - precondition:
/// - postcondition:
/// - requires:
/// - invariant:

Перехресне посилання:

/// - seealso:

 Експорт документації

HTML-документацію (розроблену для імітації власної документації Apple) можна генерувати з вбудованої документації за допомогою Jazzy , утиліти командного рядка з відкритим кодом.

$ [sudo] gem install jazzy
$ jazzy
Running xcodebuild
Parsing ...
building site
jam out ♪♫ to your fresh new docs in `docs`

Приклад консолі взято з цієї статті NSHipster


1
Схоже, поведінка змінилася в остаточній версії Xcode 6.3 (6D570). Відступні блоки тепер відформатовані як блоки коду і можуть бути вкладені у більш ніж два рівні.
NexD.

2
Дуже приємний опис синтаксису документації Swift 2.0. Ви повинні оновити публікацію, щоб включити/// - todo: keyword
Леонардо

2
@uchuugaka Насправді ні. Він, можливо, був заснований на reStructuredText раніше, але, що стосується Xcode 7, коментарі до документації базуються на Markdown, з тим самим базовим форматом, що й коментарі до майданчика. Докладніше див. Примітки до випуску Xcode 7 .
Стюарт

2
Чи є спосіб зв’язатися з іншими функціями в тому ж файлі, як це робить JavaDoc? Наприклад, "дивіться myOtherMethod(param1:)на розширену функціональність"
Ben Leggiero

1
@BenLeggiero, так, за допомогою /// - Tag: otherMethodі [otherMethod](x-source-tag://otherMethod). Детальніше дивіться у моїй відповіді .
Глина Елліс

58

Ось деякі речі, які працюють для документування швидкого коду в Xcode 6. Він дуже гнучкий і чутливий до колонок, але краще, ніж нічого:

class Foo {

    /// This method does things.
    /// Here are the steps you should follow to use this method
    ///
    /// 1. Prepare your thing
    /// 2. Tell all your friends about the thing.
    /// 3. Call this method to do the thing.
    ///
    /// Here are some bullet points to remember
    ///
    /// * Do it right
    /// * Do it now
    /// * Don't run with scissors (unless it's tuesday)
    ///
    /// :param: name The name of the thing you want to do
    /// :returns: a message telling you we did the thing
    func doThing(name : String) -> String {
        return "Did the \(name) thing";
    }
}

Вищенаведене відображається у Швидкій довідці, як ви очікували, відформатованих числових списків, точок кулі, параметрів та документації із поверненим значенням.

Нічого цього не зафіксовано документально - подайте Радар, щоб допомогти їм.


2
Метт Томпсон написав статтю про це , і він вважає, що це так reStructuredText.
Еоніл

У наведеному вище прикладі символи плюс (+) і мінус (-) також будуть виступати як точки кулі, крім показаних зірочок.
Вінс О'Салліван

Здається, що ///між будь-яким пояснювальним текстом та рядками :param:або :returns:рядками потрібен порожній рядок коментаря ( ) . Відмова від цього призводить до того, що XCode (6.1.1 під час написання) включає довідку параметрів у основний фрагмент опису функції.
Робін Мачарг

На жаль, це не працює з Xcode 7 Beta. Сподіваємось, вони виправлять це у версії випуску.
stevo.mit

1
Xcode 7 прийняв інший синтаксис: ericasadun.com/2015/06/14/swift-header-documentation-in-xcode-7
Zmey

41

Нове в Xcode 8 , ви можете вибрати такий спосіб

func foo(bar: Int) -> String { ... }

Потім натисніть command+ option+/ або виберіть "Структура" - "Додати документацію" у меню "Редактор" Xcode, і він створить для вас такий шаблон коментарів:

/// <#Description#>
///
/// - parameter bar: <#bar description#>
///
/// - returns: <#return value description#>

Дякую за це Я лише зазначу, що клавіатура, яку ви вказуєте, не працює на датській клавіатурі, де "/" є shift- "7".
RenniePet

27

Swift включає "///" обробку коментарів (хоча, мабуть, ще не все).

Напишіть щось на кшталт:

/// Hey!
func bof(a: Int) {

}

Потім виберіть варіант і натисніть на ім'я func та voilà :)


11

Я можу підтвердити, що ShakenManChild запропонував рішення peopr

Просто переконайтеся, що у вас є порожній рядок під описом!

Недійсна ситуація

Правильний шлях

Інший спосіб

Ще один стиль коментування


8

Так. База загальна (я зробив фрагменти до неї з еквівалентом Obj-C)

Завдання-C:

/**
 @brief <#Short description - what it is doing#>

 @discussion <#Description#>

 @param  <#paramName#> <#Description#>.

 @return <#dataType#> <#Description#>.
 */

Швидкий

/**
<#Short inline description - what it is doing#>

<#Description#>

:param:  <#paramName#> <#Description#>.

:returns: <#dataType#> <#Description#>.
*/


6

Я знайшов щось цікаве, копаючись у бінарному коді Xcode. Файли з закінченням .swiftdoc. У ньому, безумовно, є документи, оскільки ці файли містять документи для API Swift UIKit / Foundation, на жаль, це, мабуть, є власним форматом файлів, для використання у переглядачі Документації в Xcode.




-1

Можливо, це гарна ідея придивитися до AppleDoc або власного Apple HeaderDoc, який не дуже визнаний. Я все ще можу знайти підказки HeaderDoc у терміналі 10.9 Mavericks (headerdoc2html)

Рекомендую прочитати останнє " Що нового у Xcode " * (не впевнений, чи він все ще знаходиться під NDA) * Посилання вказує на версію Xcode 5.1, яка також містить інформацію про HeaderDoc.


-1

Станом на Xcode 5.0 підтримуються структуровані коментарі Doxygen та HeaderDoc.

Джерело


1
Ну, я питав про Свіфта в даному випадку.
pconcepcion

@pconcepcion Чи використовуєте Ви Swift в Xcode? Тоді так.
Метт Занчеллі

1
Метт, з того, що я знаю (я можу помилятися) Швидко, це не підтримується до бета-версії Xcode 6, тому я не впевнений, що документація для Xcode 5 є дійсною для Xcode 6 (а потім для Swift)
pconcepcion

@pconcepcion Це працює. Я використовував документацію доксигену в тому ж стилі, що і в Objective-C, і вона працює. Над методом чи властивістю я використовую /// This is what the method does.і т. Д.
Метт Занчеллі

Гаразд, тоді річ у тому, що ви протестували його на Xcode 6. Я був розгублений, тому що ви говорили про Xcode 5, а посилання на Xcode 5
pconcepcion
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.