क्या स्विफ्ट के पास जनरेशन जनरेशन सपोर्ट है?


238

कई भाषाएँ एक जनरेटर (जैसे या doxygen) को अनुमति देने के लिए प्रलेखन टिप्पणियों का समर्थन करती हैंjavadoc ) को उसी कोड को पार्स करके कोड प्रलेखन उत्पन्न करने के लिए ।

क्या स्विफ्ट में किसी भी प्रकार की प्रलेखन टिप्पणी जैसी विशेषता है?


यह जानते हुए कि Xcode ऑब्जेक्टिव-सी के साथ डॉक्यूमेंटेशन कमेंट्स की अनुमति देता है, मुझे विश्वास है कि Apple निकट भविष्य में इस विकल्प को स्विफ्ट के साथ Xcode में जोड़ देगा (हालाँकि, यह केवल एक
विरोध है

@ Butdeveloper मैं उसी को दबा रहा था, लेकिन जैसा कि मैंने कोई संदर्भ नहीं देखा था, मैं सोच रहा था कि क्या कोई इसकी पुष्टि कर सकता है और यह भी कि कोई विशिष्ट प्रलेखन उपकरण होगा या नहीं।
अपराह्न

1
वे भविष्य में निश्चित रूप से कुछ जोड़ेंगे, // MARK:टिप्पणी भविष्य के Xcode संस्करण के लिए भी निर्धारित है।
लिएंड्रोस

कक्षा के तरीकों के लिए डॉक्सीजीन-शैली की तरह की टिप्पणी, ~ कई ~ बहुत सी केट के साथ। मैं एक के लिए सिर्फ डॉक्सीजन शैली का उपयोग करता रहूंगा (जैसे मैंने ओब्ज-सी के लिए किया था) और आशा है कि एक्सकोड उन लोगों के लिए अपने समर्थन में सुधार करता है।
पास्कल

1
ब्लॉक मापदंडों का दस्तावेजीकरण करने के लिए, stackoverflow.com/a/41970146/1054573
लियोनार्ड पाउली

जवाबों:


386

डॉक्यूमेंटेशन टिप्पणियों का समर्थन मूल रूप से Xcode में किया जाता है, क्विक हेल्प में स्मार्टली रेंडर किए गए डॉक्यूमेंटेशन का निर्माण करते हैं ( पॉपओवर में जब-जब सिंबल का निर्माण होता है, और क्विक हेल्प इंस्पेक्टर में दोनों)⌥⌘2 )।

प्रतीक दस्तावेजीकरण टिप्पणियां अब उसी मार्काडाउन सिंटैक्स पर आधारित हैं, जिसका उपयोग रिच प्लेग्राउंड टिप्पणियों द्वारा किया जाता है, इसलिए आप जो खेल के मैदानों में कर सकते हैं उसका बहुत कुछ अब सीधे स्रोत कोड प्रलेखन में उपयोग किया जा सकता है।

सिंटैक्स के पूर्ण विवरण के लिए, मार्कअप स्वरूपण संदर्भ देखें । ध्यान दें कि अमीर खेल के मैदान टिप्पणियों और प्रतीक प्रलेखन के लिए वाक्यविन्यास के बीच कुछ विसंगतियां हैं; ये दस्तावेज़ में इंगित किए गए हैं (जैसे ब्लॉक उद्धरण केवल खेल के मैदानों में उपयोग किए जा सकते हैं)।

नीचे एक उदाहरण और वाक्यविन्यास तत्वों की एक सूची है जो वर्तमान में प्रतीक प्रलेखन टिप्पणियों के लिए काम करते हैं।


अपडेट

Xcode 7 बीटा 4 ~ जोड़ा गया " - Throws: ..." एक शीर्ष-स्तरीय सूची आइटम के रूप में जो मापदंडों के साथ प्रकट होता है और त्वरित सहायता में विवरण लौटाता है।

Xcode 7 बीटा 1 ~ स्विफ्ट 2 के साथ वाक्य रचना में कुछ महत्वपूर्ण बदलाव - मार्कडाउन (खेल के मैदानों के समान) के आधार पर अब प्रलेखन टिप्पणियां।

Xcode 6.3 (6D570) ~ इंडेंट किए गए टेक्स्ट को अब कोड ब्लॉक के रूप में स्वरूपित किया गया है, जिसमें बाद के इंडेंटेशन नेस्टेड हैं। इस तरह के कोड ब्लॉक में एक खाली लाइन को छोड़ना संभव प्रतीत नहीं होता है - पाठ में ऐसा करने की कोशिश करते हुए इसमें किसी भी वर्ण के साथ अंतिम पंक्ति के अंत में टैकल किया जा रहा है।

Xcode 6.3 बीटा ~ इनलाइन कोड को अब बैकटिक्स का उपयोग करके प्रलेखन टिप्पणियों में जोड़ा जा सकता है।


स्विफ्ट 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."
}

स्विफ्ट डॉक्यूमेंटेशन क्विक हेल्प


स्विफ्ट 2 के लिए सिंटैक्स ( मार्कडाउन पर आधारित )


टिप्पणी शैली

दोनों ///(इनलाइन) और /** */(ब्लॉक) शैली टिप्पणियाँ प्रलेखन टिप्पणियों के उत्पादन के लिए समर्थित हैं। हालांकि मैं व्यक्तिगत रूप से /** */टिप्पणियों की दृश्य शैली को पसंद करता हूं , 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


कीवर्ड

मार्काड प्रारूपण के अलावा, Xcode अन्य मार्कअप कीवर्ड को त्वरित सहायता में प्रमुखता से प्रदर्शित करने के लिए पहचानता है। ये मार्कअप कीवर्ड ज्यादातर प्रारूप लेते हैं - <keyword>:(अपवाद हैparameter , जिसमें बृहदान्त्र से पहले पैरामीटर नाम भी शामिल है), जहां कीवर्ड को अपरकेस / लोअरकेस वर्णों के किसी भी संयोजन के साथ लिखा जा सकता है।

प्रतीक खंड खोजशब्द

"विवरण" खंड के नीचे, और "घोषित में" अनुभाग के ऊपर, मदद कीवर्ड में निम्नलिखित कीवर्ड प्रमुख वर्गों के रूप में प्रदर्शित किए जाते हैं। जब शामिल किया जाता है, तो उनका क्रम नीचे प्रदर्शित होता है, भले ही आप उन्हें अपनी टिप्पणी में जिस भी क्रम में चाहें शामिल कर सकते हैं।

मार्कअप प्रारूपण संदर्भ के प्रतीक अनुभाग कमांड अनुभाग में अनुभाग कीवर्ड और उनके इच्छित उपयोगों की पूरी तरह से प्रलेखित सूची देखें ।

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

वैकल्पिक रूप से, आप प्रत्येक पैरामीटर को इस तरह से लिख सकते हैं:

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

प्रतीक विवरण फ़ील्ड कीवर्ड

कीवर्ड की निम्न सूची के रूप में प्रदर्शित कर रहे हैं बोल्ड शीर्षकों मदद दर्शक के "विवरण" अनुभाग के मुख्य भाग में। आप उन्हें जिस भी क्रम में लिखते हैं, बाकी "विवरण" खंड के साथ दिखाई देगा।

एरिका सदुन के इस उत्कृष्ट ब्लॉग लेख से पूरी सूची पारंगत हो गई। साथ ही मार्कअप स्वरूपण संदर्भ के प्रतीक विवरण फ़ील्ड कमांड अनुभाग में खोजशब्दों और उनके इच्छित उपयोगों की पूरी तरह से प्रलेखित सूची देखें ।

विशेषताएं:

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

उपलब्धता:

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

admonitions:

/// - 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) के अंतिम संस्करण में व्यवहार बदल गया है। इंडेंट किए गए ब्लॉक अब कोड के ब्लॉक के रूप में फॉर्मेट किए गए हैं और दो से अधिक स्तरों के साथ नेस्टेड किए जा सकते हैं।
नेक्सडी।

2
स्विफ्ट 2.0 प्रलेखन सिंटैक्स का बहुत अच्छा विवरण। आपको /// - todo: keyword
लियोनार्डो

2
@uchuugaka वास्तव में नहीं। हो सकता है कि यह पहले से रीस्ट्रक्टर्डटेक्स्ट पर आधारित हो, लेकिन जैसा कि Xcode 7 प्रलेखन टिप्पणियां मार्कडाउन पर आधारित हैं, खेल के मैदान की टिप्पणियों के समान मूल प्रारूप के साथ। विवरण के लिए Xcode 7 रिलीज़ नोट्स देखें।
स्टुअर्ट

2
क्या उसी फ़ाइल में अन्य कार्यों से लिंक करने का एक तरीका है, जैसे कि JavaDoc करता है? उदाहरण के लिए, " myOtherMethod(param1:)विस्तारित कार्यक्षमता के लिए देखें "
बेन लेगिएरो

1
@BenLeggiero, हाँ, का उपयोग करके /// - Tag: otherMethodऔर [otherMethod](x-source-tag://otherMethod)। अधिक जानकारी के लिए, मेरा उत्तर देखें ।
क्ले एलिस 19

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
Eonil

उपरोक्त उदाहरण में, द प्लस (+) और माइनस (-) प्रतीक दिखाए गए तारांकन के अलावा, बुलेट बिंदु के रूप में भी कार्य करेंगे।
विंस ओ'सुल्लिवन

ऐसा लगता है कि ///किसी भी व्याख्यात्मक पाठ और :param:या :returns:लाइनों के बीच एक रिक्त टिप्पणी ( ) लाइन की आवश्यकता है । समारोह विवरण के मुख्य निकाय में पैरामीटर मदद को शामिल करने के लिए XCode (लेखन के समय 6.1.1) का कारण बनता है।
रॉबिन माक्रग

Unfortunatelly यह Xcode 7 बीटा के साथ काम नहीं करता है। उम्मीद है कि वे इसे एक रिलीज़ संस्करण में ठीक कर देंगे।
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#>

इसके लिए धन्यवाद। मैं बस उल्लेख करता हूं कि आपके द्वारा इंगित कीबोर्ड शॉर्टकट डेनिश कीबोर्ड पर काम नहीं करता है, जहां "/" शिफ्ट है- "7"।
RenniePet

27

स्विफ्ट में "///" टिप्पणी हैंडलिंग शामिल है (हालांकि अभी तक सब कुछ नहीं है)।

कुछ इस तरह लिखें:

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

}

फिर func name और voilà पर विकल्प पर क्लिक करें :)


11

मैं पुष्टि कर सकता हूं कि ShakenManChild ने peopr समाधान प्रदान किया है

बस सुनिश्चित करें, आपके पास विवरण के नीचे एक खाली रेखा है!

एक अमान्य स्थिति

सही तरीका

दूसरा रास्ता

एक और टिप्पणी शैली


8

हाँ। बेस कॉमन (मैंने ओब्ज-सी समकक्ष के साथ इसके लिए स्निपेट बनाया)

उद्देश्य सी:

/**
 @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

मैंने कुछ दिलचस्प पाया है, एक्सकोड बाइनरी में खुदाई। समाप्ति के साथ फाइलें .swiftdoc। इसमें निश्चित रूप से डॉक्स हैं, क्योंकि इन फ़ाइलों में स्विफ्ट यूआईकिट / फाउंडेशन एपीआई के लिए डॉक्स हैं, दुर्भाग्य से यह Xcode में दस्तावेज़ीकरण दर्शक के उपयोग के लिए एक मालिकाना फ़ाइल प्रारूप लगता है।



0

Jazzy सुंदर सेब स्टाइल प्रलेखन उत्पन्न करने में मदद कर सकता है। यहां एक नमूना ऐप है, जिसमें विवरण है कि कैसे उपयोग करें और जल्दी से कॉन्फ़िगर करें।

https://github.com/SumitKr88/SwiftDocumentationUsingJazzy


-1

हो सकता है कि AppleDoc या Apple के अपने ही हैडरडॉक पर नज़र रखना अच्छा होगा जिसे बहुत मान्यता नहीं है। मैं अभी भी 10.9 Mavericks टर्मिनल (हेडरडॉक 2html) में कुछ हेडरडोक संकेत पा सकता हूं

मैं नवीनतम " व्हाट्स न्यू इन एक्सकोड " पढ़ने की सलाह देता हूं * (यह सुनिश्चित नहीं है कि यह अभी भी एनडीए के तहत है) * Xcode 5.1 संस्करण के लिंक पॉइंट्स में हैडरडॉक के बारे में भी जानकारी है।


-1

Xcode 5.0 के रूप में, Doxygen और HeaderDoc संरचित टिप्पणियों का समर्थन किया जाता है।

स्रोत


1
खैर, मैं इस मामले में स्विफ्ट के बारे में पूछ रहा था।
pconcepcion

@pconcepcion क्या आप Xcode में Swift का उपयोग कर रहे हैं? तो ठीक।
मैट ज़नशेल्ली

1
मैट, जो मुझे पता है (मैं गलत हो सकता है) स्विफ्ट यह Xcode 6 बीटा तक समर्थित नहीं है, इसलिए मुझे यकीन नहीं है कि Xcode 5 के लिए प्रलेखन यह Xcode 6 (और तब Swift) के लिए वैध है
pconcepcion

@pconcepcion यह काम करता है। मैं उसी शैली के डॉक्यूमेंटेशन डॉक्यूमेंटेशन का उपयोग कर रहा हूं जैसा मैंने ऑब्जेक्टिव-सी में किया था और यह काम करता है। एक विधि या संपत्ति के ऊपर, मैं /// This is what the method does.आदि का उपयोग करता हूं
मैट ज़नचेल्ली

ठीक है, तो बात यह है कि आपने इसे Xcode 6 पर परीक्षण किया है। मैं उलझन में था क्योंकि आप Xcode 5 के बारे में बात कर रहे थे और लिंक Xcode 5 के लिए है
pconcepcion
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.