Swift'in belge oluşturma desteği var mı?


238

Birçok dil , bir üreticinin (benzer veya doxygen gibi ) aynı kodu ayrıştırarak kod belgeleri oluşturmasına izin vermek için belge yorumlarını destekler .javadoc

Swift'in böyle bir belge açıklama özelliği var mı?


Objektif-c ile Xcode'un dokümantasyon yorumlarına izin verdiğini bilerek, Apple'ın bu seçeneği yakın zamanda hızlı bir şekilde
Xcode'a

@ Δdeveloper Ben de aynısını varsayıyordum, ama herhangi bir referans görmediğim için birisinin bunu onaylayıp onaylayamayacağını ve herhangi bir özel dokümantasyon aracı olup olmayacağını merak ediyordum.
pconcepcion

1
Gelecekte kesinlikle bir şeyler ekleyecekler, // MARK:yorum da gelecekteki bir Xcode sürümü için planlandı.
Leandros

Doxygen-tarzı, ~ birkaç ~ A LOT OF uyarılar ile sınıf yöntemleri için tür çalışma yorum. Ben biri için sadece Doxygen stilini kullanmaya devam edeceğim (Obj-C için yaptığım gibi) ve umarım Xcode bunlara olan desteğini geliştirir.
Pascal

1
Blok parametrelerini belgelemek için bkz. Stackoverflow.com/a/41970146/1054573
Leonard Pauli

Yanıtlar:


386

Dokümantasyon yorumları yerel olarak Xcode'da desteklenir ve Hızlı Yardım'da (hem sembolleri tıklarken popoverde hem de Hızlı Yardım Denetçisi'nde ⌥⌘2) akıllıca hazırlanmış belgeler üretir .

Sembol dokümantasyon yorumları artık zengin oyun alanı yorumları tarafından kullanılan Markdown sözdizimine dayanmaktadır , bu nedenle oyun alanlarında yapabileceklerinizin çoğu artık doğrudan kaynak kodu dokümantasyonunda kullanılabilir.

Sözdiziminin tüm ayrıntıları için bkz. İşaretleme Biçimlendirme Başvurusu . Zengin oyun alanı yorumları ve sembol belgeleri için sözdizimi arasında bazı tutarsızlıklar olduğunu unutmayın; bunlar belgede belirtilmiştir (örn. blok alıntılar sadece oyun alanlarında kullanılabilir).

Aşağıda, şu anda sembol dokümantasyon yorumları için çalışan sözdizimi öğelerinin bir örneği ve listesi bulunmaktadır.


Güncellemeler

Xcode 7 beta 4 ~- Throws: ... Hızlı Yardım'da parametrelerin ve dönüş açıklamalarının yanında görünen üst düzey liste öğesi olarak " " eklendi .

Xcode 7 beta 1 ~ Swift 2 ile sözdizimindeki bazı önemli değişiklikler - şimdi Markdown'a dayanan (oyun alanlarıyla aynı) dokümantasyon yorumları.

Xcode 6.3 (6D570) ~ Girintili metin artık kod blokları olarak biçimlendirildi ve sonraki girintiler yuvalandı. Böyle bir kod bloğunda boş bir satır bırakmak mümkün görünmemektedir - bunu yapmaya çalışmak, metnin içinde herhangi bir karakterle son satırın sonuna yapışmasını sağlar.

Xcode 6.3 beta ~ Satıriçi kod artık backticks kullanılarak dokümantasyon yorumlarına eklenebilir.


Swift 2 örneği

/// 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 Belgeleri Hızlı Yardım


Swift 2 için Sözdizimi ( Markdown'a dayalı )


Yorum Stili

Doküman yorumları oluşturmak için hem ///(satır içi) hem de /** */(blok) stil yorumlar desteklenir. Şahsen /** */yorumların görsel stilini tercih ederken , Xcode'un otomatik girintisi, önde gelen boşluğu kaldırırken kopyalama / yapıştırma sırasında bu yorum stili için biçimlendirmeyi bozabilir. Örneğin:

/**
See sample usage:

    let x = method(blah)
*/

Yapıştırırken, kod bloğu girintisi kaldırılır ve artık kod olarak görüntülenmez:

/**
See sample usage:

let x = method(blah)
*/

Bu nedenle, genellikle ///bu cevaptaki diğer örnekler için kullanıyorum ve kullanacağım.


Blok Elemanları

Başlık:

/// # My Heading

veya

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


Alt pozisyonuna:

/// ## My Subheading

veya

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


Yatay kural:

/// ---


Sırasız (madde işaretli) listeler:

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

Ayrıca +veya *sırasız listeler için kullanabilirsiniz , tutarlı olması gerekir.


Sıralı (numaralı) listeler:

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


Kod blokları:

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

En az dört boşluk girintisi gerekir.


Satır İçi Öğeler

Vurgu (italik):

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


Güçlü (kalın):

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

Aynı öğede yıldız ( *) ve alt çizgi ( _) karıştıramayacağınızı unutmayın .


Satır içi kod:

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


Bağlantılar:

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


Görüntüler:

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

URL, bir web URL'si ("http: //" kullanarak) veya mutlak dosya yolu URL'si olabilir (göreli dosya yollarının çalışmasını sağlayamıyorum).

Bağlantıların ve resimlerin URL'leri, tüm URL'leri tek bir yönetilebilir yerde tutmak için satır içi öğeden ayrılabilir:

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


Anahtar kelimeler

Markdown biçimlendirmesine ek olarak, Xcode, diğer Yardım biçimlendirme anahtar kelimelerinin Hızlı Yardım'da belirgin bir şekilde görüntülenmesini tanır. Bu biçimlendirme anahtar kelimeleri çoğunlukla , iki nokta üst üste / küçük harf karakterlerinin herhangi bir birleşimi ile yazılabileceği biçime sahiptir - <keyword>:(istisna, parameteriki noktadan önceki parametre adını da içerir).

Sembol Bölümü anahtar kelimeleri

Aşağıdaki anahtar kelimeler yardım görüntüleyicide, "Açıklama" bölümünün altında ve "Beyan Edildi" bölümünün üstünde belirgin bölümler olarak görüntülenir. Dahil edildiğinde, yorumlarınıza istediğiniz sırayla dahil edebilseniz bile, sıraları aşağıda gösterildiği gibi sabitlenir.

Biçimlendirme Biçimlendirme Başvurusunun Sembol Bölüm Komutları bölümündeki bölüm anahtar sözcüklerinin ve bunların kullanım amaçlarının tam olarak belgelenmiş listesine bakın .

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

Alternatif olarak, her parametreyi şu şekilde yazabilirsiniz:

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

Sembol Açıklama Alan anahtar kelimeleri

Aşağıdaki anahtar kelime listesi , yardım görüntüleyicinin "Açıklama" bölümünün gövdesinde kalın başlıklar olarak görüntülenir. "Açıklama" bölümünün geri kalanında olduğu gibi, bunları yazdığınız sırada görürsünüz.

Tüm liste Erica Sadun'un bu mükemmel blog makalesinden açıklanmıştır . Ayrıca , Biçimlendirilmiş Biçimlendirme Başvurusunun Sembol Açıklama Alan Komutları bölümünde tam olarak belgelenmiş anahtar kelime listesine ve kullanım amaçlarına bakın .

Atıflar:

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

Kullanılabilirlik:

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

Uyarılar:

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

Kalkınma Durumu:

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

Uygulama Nitelikleri:

/// - complexity:

İşlevsel Anlambilim:

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

Çapraz referans:

/// - seealso:

 Belgeleri Dışa Aktarma

HTML belgeleri (Apple'ın kendi belgelerini taklit etmek için tasarlanmıştır), açık kaynaklı bir komut satırı yardımcı programı olan Jazzy kullanılarak satır içi belgelerden oluşturulabilir .

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

Bu NSHipster makalesinden alınan konsol örneği


1
Görünüşe göre davranış Xcode 6.3'ün son sürümünde değişti (6D570). Girintili bloklar artık kod blokları olarak biçimlendirilmiştir ve ikiden fazla düzeyle yuvalanabilir.
NexD.

2
Swift 2.0 dokümantasyon sözdiziminin çok güzel açıklaması. Sen dahil etmek yayınında güncellenir gerektiğini/// - todo: keyword
Leonardo

2
@uchuugaka Aslında hayır. Daha önce reStructuredText'e dayanmış olabilir, ancak Xcode 7 dokümantasyon yorumlarından itibaren oyun alanı yorumlarıyla aynı temel formatta Markdown'a dayanmaktadır. Ayrıntılar için Xcode 7 Sürüm Notlarına bakın.
Stuart

2
JavaDoc gibi aynı dosyadaki diğer işlevlere bağlamanın bir yolu var mı? Örneğin, " myOtherMethod(param1:)genişletilmiş işlevsellik için bakın "
Ben Leggiero

1
@BenLeggiero, evet, tarafından kullanılarak /// - Tag: otherMethodve [otherMethod](x-source-tag://otherMethod). Daha fazla ayrıntı için cevabıma bakın .
Clay Ellis

58

İşte Xcode 6'da hızlı kodu belgelemek için çalışan bazı şeyler. Çok hatalıdır ve sütunlara karşı hassastır, ancak hiçbir şeyden daha iyidir:

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

Yukarıdakiler, biçimlendirilmiş sayısal listeler, madde işaretleri, parametre ve dönüş değeri belgelerinde beklediğiniz gibi Hızlı Yardım'da işlenir.

Bunların hiçbiri belgelenmemiştir - onlara yardım etmek için bir Radar dosyası gönderin.


2
Mattt Thompson bunun hakkında bir makale yazdı ve bunun olduğunu düşünüyor reStructuredText.
Eonil

Yukarıdaki örnekte, artı (+) ve eksi (-) sembolleri gösterilen yıldız işaretlerine ek olarak madde işaretleri olarak da işlev görecektir.
Vince O'Sullivan

///Herhangi bir açıklayıcı metin ile :param:veya :returns:satırları arasında boş bir yorum ( ) satırı gerekli görünüyor . Bunu atlamak, XCode'un (yazma sırasında 6.1.1) parametre tanımının işlev açıklamasının ana gövdesine eklenmesine neden olur.
Robin Macharg

Ne yazık ki bu Xcode 7 Beta ile çalışmaz. Umarım bir sürümde düzeltirler.
stevo.mit

1
Xcode 7 farklı bir sözdizimi benimsedi: ericasadun.com/2015/06/14/swift-header-documentation-in-xcode-7
Zmey

41

Xcode 8'de yeni , böyle bir yöntem seçebilirsiniz

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

Daha sonra command+ option+/ tuşlarına basın veya Xcode'un "Editör" menüsünden "Yapı" - "Belge ekle " yi seçin ve sizin için aşağıdaki yorum şablonunu oluşturur:

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

Bunun için teşekkürler. Sadece belirttiğiniz klavye kısayolunun "/" shift- "7" olduğu Danimarka klavyesinde çalışmıyor gibi göründüğünden bahsedeceğim.
RenniePet

27

Swift, "///" yorum işlemeyi içerir (muhtemelen henüz her şey olmasa da).

Şöyle bir şey yazın:

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

}

Sonra işlev adını ve voilà seçeneğini tıklatın :)


11

ShakenManChild'in peopr çözümü sağladığını onaylayabilirim

Sadece açıklamanın altında boş bir satır olduğundan emin olun!

Geçersiz bir durum

Doğru yol

Diğer yol

Başka bir yorum stili


8

Evet. Temel taban (Obj-C eşdeğeri ile bunun için snippet'ler yaptım)

Objective-C:

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

 @discussion <#Description#>

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

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

hızlı

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

<#Description#>

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

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


6

Xcode ikili dosyasında kazı yaparak ilginç bir şey buldum. Biten dosyalar .swiftdoc. Kesinlikle dokümanlar var, çünkü bu dosyalar Swift UIKit / Foundation API'sı için dokümanlar içerdiğinden, maalesef Xcode'daki Doküman görüntüleyicide kullanılmak üzere özel bir dosya formatı gibi görünüyor.




-1

AppleDoc veya Apple'ın kendi HeaderDoc'una göz atmak iyi bir fikir olabilir. çok fazla . Yine de 10.9 Mavericks terminalinde (headerdoc2html) bazı HeaderDoc ipuçları bulabiliyorum

En son " Xcode Yenilikler " * (hala NDA altında olup olmadığından emin değilim) okumanızı öneririz. * Bağlantı, HeaderDoc hakkında da bilgi içeren Xcode 5.1 sürümüne işaret eder.


-1

Xcode 5.0'dan itibaren Doxygen ve HeaderDoc yapılandırılmış yorumları desteklenmektedir.

Kaynak


1
Bu durumda Swift'i soruyordum.
pconcepcion

@pconcepcion Swift'i Xcode'da mı kullanıyorsunuz? O zaman evet.
Matt Zanchelli

1
Matt, bildiğim kadarıyla (yanlış olabilir) Swift, Xcode 6 beta'ya kadar desteklenmiyor, bu yüzden Xcode 5 için belgelerin Xcode 6 (ve sonra Swift için) için geçerli olup olmadığından emin değilim
pconcepcion

@pconcepcion Çalışır. Objective-C ile aynı stil doxygen belgelerini kullanıyorum ve işe yarıyor. Bir yöntem veya mülkün üstünde /// This is what the method does.vb.
Kullanıyorum

Tamam, o zaman Xcode 6'da test ettiniz. Xcode 5 hakkında konuştuğunuz ve bağlantı Xcode 5
pconcepcion
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.