Apakah Swift memiliki dukungan pembuatan dokumentasi?

238

Banyak bahasa mendukung komentar dokumentasi untuk memungkinkan generator (seperti javadocatau doxygen ) menghasilkan dokumentasi kode dengan menguraikan kode yang sama.

Apakah Swift memiliki fitur komentar jenis dokumentasi seperti ini?

konsepsi
sumber
Mengetahui bahwa Xcode dengan objektif-c memungkinkan komentar dokumentasi, saya percaya bahwa Apple akan menambahkan opsi ini ke Xcode dengan cepat dalam waktu dekat (namun, itu hanya dugaan, saya tidak punya bukti)
Garoal
@ Δdeveloper saya seandainya sama, tetapi karena saya belum melihat referensi, saya bertanya-tanya apakah ada yang bisa mengonfirmasi dan juga apakah akan ada alat dokumentasi khusus.
pconcepcion
1
Mereka pasti akan menambahkan sesuatu di masa depan, // MARK:komentar juga dijadwalkan untuk versi Xcode di masa depan.
Leandros
Komentar gaya Doxygen jenis pekerjaan untuk metode kelas, dengan ~ beberapa ~ BANYAK peringatan. I untuk satu hanya akan terus menggunakan gaya Doxygen (seperti yang saya lakukan untuk Obj-C) dan berharap Xcode meningkatkan dukungannya bagi mereka.
Pascal
1
Untuk mendokumentasikan parameter blok, lihat stackoverflow.com/a/41970146/1054573
Leonard Pauli

Jawaban:

386

Komentar dokumentasi didukung secara asli di Xcode, menghasilkan dokumentasi yang diterjemahkan dengan cerdas dalam Bantuan Cepat (keduanya dalam sembulan ketika -klik simbol, dan di Inspektur Bantuan Cepat ⌥⌘2).

Komentar dokumentasi simbol sekarang didasarkan pada sintaks Markdown yang sama yang digunakan oleh komentar taman bermain yang kaya, sehingga banyak hal yang dapat Anda lakukan di taman bermain sekarang dapat digunakan secara langsung dalam dokumentasi kode sumber.

Untuk detail lengkap sintaks, lihat Referensi Pemformatan Markup . Perhatikan bahwa ada beberapa perbedaan antara sintaksis untuk komentar taman bermain kaya & dokumentasi simbol; ini ditunjukkan dalam dokumen (mis. kutipan blok hanya dapat digunakan di taman bermain).

Di bawah ini adalah contoh dan daftar elemen sintaks yang saat ini berfungsi untuk komentar dokumentasi simbol.


Pembaruan

Xcode 7 beta 4 ~ Ditambahkan " - Throws: ..." sebagai item daftar tingkat atas yang muncul di samping parameter dan mengembalikan deskripsi dalam Bantuan Cepat.

Xcode 7 beta 1 ~ Beberapa perubahan signifikan pada sintaksis dengan Swift 2 - komentar dokumentasi sekarang berdasarkan Markdown (sama seperti taman bermain).

Xcode 6.3 (6D570) ~ Teks indentasi sekarang diformat sebagai blok kode, dengan lekukan berikutnya yang bersarang. Tampaknya tidak mungkin untuk meninggalkan baris kosong di blok kode seperti itu - mencoba melakukannya menghasilkan teks yang ditempelkan di akhir baris terakhir dengan karakter apa pun di dalamnya.

Xcode 6.3 beta ~ Kode inline sekarang dapat ditambahkan ke komentar dokumentasi menggunakan backticks.


Contoh untuk 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."
}

Dokumentasi Swift Bantuan Cepat


Sintaks untuk Swift 2 (berdasarkan penurunan harga )


Gaya Komentar

Kedua ///(inline) dan /** */komentar (blok) gaya yang didukung untuk memproduksi komentar dokumentasi. Sementara saya pribadi lebih suka gaya visual /** */komentar, lekukan otomatis Xcode dapat merusak format untuk gaya komentar ini saat menyalin / menempel karena menghilangkan spasi putih terkemuka. Sebagai contoh:

/**
See sample usage:

    let x = method(blah)
*/

Saat menempel, indentasi blok kode dihapus dan tidak lagi dirender sebagai kode:

/**
See sample usage:

let x = method(blah)
*/

Untuk alasan ini, saya biasanya menggunakan ///, dan akan menggunakannya untuk sisa contoh dalam jawaban ini.


Elemen Blok

Tajuk:

/// # My Heading

atau

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


Subpos:

/// ## My Subheading

atau

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


Aturan horisontal:

/// ---


Daftar tidak berurutan (berpoin):

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

Anda juga dapat menggunakan +atau *untuk daftar tidak berurutan, hanya saja harus konsisten.


Daftar yang dipesan (bernomor):

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


Blok kode:

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

Lekukan setidaknya empat ruang diperlukan.


Elemen Sebaris

Penekanan (miring):

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


Kuat (berani):

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

Perhatikan bahwa Anda tidak dapat mencampur tanda bintang ( *) dan garis bawah ( _) pada elemen yang sama.


Kode sebaris:

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


Tautan:

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


Gambar-gambar:

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

URL dapat berupa URL web (menggunakan "http: //") atau URL path file absolut (Saya sepertinya tidak bisa mendapatkan path file relatif untuk bekerja).

URL untuk tautan dan gambar juga dapat dipisahkan dari elemen sebaris untuk menjaga semua URL di satu tempat yang dapat dikelola:

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


Kata kunci

Selain pemformatan Markdown, Xcode mengenali kata kunci markup lainnya untuk ditampilkan secara jelas di Bantuan Cepat. Kata kunci markup ini sebagian besar mengambil format - <keyword>:(pengecualiannya adalahparameter , yang juga menyertakan nama parameter sebelum titik dua), di mana kata kunci itu sendiri dapat ditulis dengan kombinasi karakter huruf besar / kecil.

Kata kunci Bagian Simbol

Kata kunci berikut ditampilkan sebagai bagian yang menonjol di penampil bantuan, di bawah bagian "Deskripsi", dan di atas bagian "Dinyatakan dalam". Ketika disertakan, pesanan mereka diperbaiki seperti yang ditampilkan di bawah ini meskipun Anda dapat memasukkannya dalam urutan apa pun yang Anda suka dalam komentar Anda.

Lihat daftar kata kunci bagian yang sepenuhnya terdokumentasi dan kegunaannya di bagian Perintah Bagian Simbol dari Referensi Pemformatan Markup .

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

Atau, Anda dapat menulis setiap parameter dengan cara ini:

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

Simbol Deskripsi Kata kunci bidang

Daftar kata kunci berikut ditampilkan sebagai judul tebal di badan bagian "Deskripsi" pada penampil bantuan. Mereka akan muncul dalam urutan apa pun yang Anda tuliskan, seperti bagian "Deskripsi" lainnya.

Daftar lengkap diparafrasekan dari artikel blog yang sangat baik ini oleh Erica Sadun. Juga lihat daftar kata kunci yang sepenuhnya didokumentasikan dan kegunaan yang dimaksudkan di bagian Perintah Keterangan Simbol dari Referensi Pemformatan Markup .

Atribusi:

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

Ketersediaan:

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

Peringatan:

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

Negara pembangunan:

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

Kualitas Penerapan:

/// - complexity:

Semantik Fungsional:

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

Referensi silang:

/// - seealso:

 Mengekspor Dokumentasi

Dokumentasi HTML (dirancang untuk meniru dokumentasi Apple sendiri) dapat dihasilkan dari dokumentasi inline menggunakan Jazzy , utilitas baris perintah sumber terbuka.

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

Contoh konsol yang diambil dari artikel NSHipster ini

Stuart
sumber
1
Sepertinya perilaku berubah di versi final Xcode 6.3 (6D570). Blok berlekuk sekarang diformat sebagai blok kode dan dapat disarangkan dengan lebih dari dua level.
NexD.
2
Deskripsi yang sangat bagus dari sintaks dokumentasi Swift 2.0. Anda harus memperbarui pos untuk menyertakan/// - todo: keyword
Leonardo
2
@uchuugaka Sebenarnya tidak. Ini mungkin telah didasarkan pada reStructuredText sebelumnya, tetapi pada dokumentasi Xcode 7 komentar didasarkan pada Markdown, dengan format dasar yang sama dengan komentar taman bermain. Lihat Catatan Rilis Xcode 7 untuk detailnya.
Stuart
2
Apakah ada cara untuk menautkan ke fungsi lain dalam file yang sama, seperti yang dilakukan JavaDoc? Misalnya, "lihat myOtherMethod(param1:)fungsionalitas yang diperluas"
Ben Leggiero
1
@ BenLeggiero, ya, dengan menggunakan /// - Tag: otherMethoddan [otherMethod](x-source-tag://otherMethod). Untuk lebih jelasnya, lihat jawaban saya .
Clay Ellis
58

Berikut adalah beberapa hal yang berfungsi untuk mendokumentasikan kode cepat di Xcode 6. Sangat bermasalah dan sensitif terhadap titik dua, tetapi lebih baik daripada tidak sama sekali:

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";
    }
}

Di atas diberikan dalam Bantuan Cepat seperti yang Anda harapkan dengan daftar angka yang diformat, poin-poin, parameter dan dokumentasi nilai pengembalian.

Tak satu pun dari ini didokumentasikan - mengajukan Radar untuk membantu mereka.

Anak Terpercaya
sumber
2
Mattt Thompson menulis artikel tentang ini , dan dia pikir ini reStructuredText.
Eonil
Dalam contoh di atas, simbol plus (+) dan minus (-) juga akan bertindak sebagai poin, selain tanda bintang yang ditampilkan.
Vince O'Sullivan
Tampaknya komentar kosong ( ///) baris diperlukan antara teks penjelasan dan :param:atau :returns:garis. Menghilangkan ini menyebabkan XCode (6.1.1 pada saat penulisan) untuk menyertakan bantuan parameter dalam tubuh utama dari deskripsi fungsi.
Robin Macharg
Sayangnya ini tidak bekerja dengan Xcode 7 Beta. Semoga mereka akan memperbaikinya dalam versi rilis.
stevo.mit
1
Xcode 7 mengadopsi sintaks yang berbeda: ericasadun.com/2015/06/14/swift-header-documentation-in-xcode-7
Zmey
41

Baru di Xcode 8 , Anda dapat memilih metode seperti ini

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

Kemudian tekan command+ option+/ atau pilih "Struktur" - "Tambahkan dokumentasi" dari menu "Editor" Xcode, dan itu akan menghasilkan templat komentar berikut untuk Anda:

/// <#Description#>
///
/// - parameter bar: <#bar description#>
///
/// - returns: <#return value description#>
Logan Jahnke
sumber
Terima kasih untuk ini. Saya hanya akan menyebutkan bahwa pintasan keyboard yang Anda pilih tampaknya tidak berfungsi pada keyboard Denmark, di mana "/" bergeser- "7".
RenniePet
27

Swift termasuk penanganan komentar "///" (walaupun mungkin belum semuanya).

Tulis sesuatu seperti:

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

}

Kemudian klik opsi pada nama func dan voila :)

Jean Le Moignan
sumber
11

Saya dapat mengonfirmasi bahwa ShakenManChild telah menyediakan solusi peopr

Pastikan saja, Anda memiliki baris kosong di bawah deskripsi!

Situasi tidak valid

Cara yang tepat

Cara lain

Gaya berkomentar lainnya

DAH
sumber
8

Iya. Dasar umum (saya membuat cuplikan untuknya dengan setara Obj-C)

Tujuan-C:

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

 @discussion <#Description#>

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

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

Cepat

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

<#Description#>

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

:returns: <#dataType#> <#Description#>.
*/
Jakub Truhlář
sumber
6

Saya telah menemukan sesuatu yang menarik, menggali dalam biner Xcode. File dengan akhiran .swiftdoc. Ini pasti memiliki dokumen, karena file-file ini mengandung dokumen untuk Swift UIKit / Foundation API, sayangnya itu tampaknya merupakan format file berpemilik, untuk digunakan dalam penampil Dokumentasi dalam Xcode.

Leandros
sumber
5

Di Editor Xcode -> Struktur -> Tambahkan Dokumentasi.

masukkan deskripsi gambar di sini

Abo3atef
sumber
Ya, telah disebutkan lebih dari 3 bulan lalu oleh Logan Jahnke .
Franklin Yu
-1

Mungkin itu ide yang baik untuk memiliki mata pada AppleDoc atau Apple sendiri HeaderDoc yang tidak diakui sangat banyak. Saya masih dapat menemukan beberapa petunjuk HeaderDoc di terminal 10.9 Mavericks (headerdoc2html)

Saya sarankan untuk membaca " What's New In Xcode " terbaru (* tidak yakin apakah masih di bawah NDA) * Tautan menunjuk ke versi Xcode 5.1 yang berisi info tentang HeaderDoc juga.

TiBooX
sumber
-1

Pada Xcode 5.0, komentar terstruktur Doxygen dan HeaderDoc didukung.

Sumber

Matt Zanchelli
sumber
1
Yah, saya bertanya tentang Swift dalam kasus ini.
pconcepcion
@ pconcepcion Apakah Anda menggunakan Swift di Xcode? Lalu ya.
Matt Zanchelli
1
Matt, dari yang saya tahu (saya mungkin salah) Swift tidak didukung hingga Xcode 6 beta, jadi saya tidak yakin apakah dokumentasi untuk Xcode 5 itu valid untuk Xcode 6 (dan untuk Swift kemudian)
pconcepcion
@ pconcepcion Berhasil. Saya telah menggunakan dokumentasi gaya oksigen yang sama seperti yang saya lakukan di Objective-C dan berfungsi. Di atas metode atau properti, saya menggunakan /// This is what the method does.dll.
Matt Zanchelli
Ok, masalahnya adalah Anda telah mengujinya di Xcode 6. Saya bingung karena Anda berbicara tentang Xcode 5 dan tautannya adalah untuk Xcode 5
pconcepcion