Swift รองรับการสร้างเอกสารหรือไม่


238

หลายภาษารองรับการแสดงความคิดเห็นเอกสารประกอบเพื่อให้เครื่องกำเนิดไฟฟ้า (เช่นjavadocหรือdoxygen ) เพื่อสร้างเอกสารรหัสโดยแยกวิเคราะห์รหัสเดียวกันนั้น

Swift มีคุณลักษณะการแสดงความคิดเห็นเอกสารประกอบประเภทใด ๆ หรือไม่


รู้ว่า Xcode ด้วยวัตถุประสงค์ -c ช่วยให้ความคิดเห็นเอกสารฉันเชื่อว่า Apple จะเพิ่มตัวเลือกนี้เพื่อ Xcode อย่างรวดเร็วในอนาคตอันใกล้ (อย่างไรก็ตามมันเป็นเพียงการคาดคะเนฉันไม่มีหลักฐาน)
Garoal

@ Δdeveloperฉันคิดเหมือนกัน แต่เมื่อฉันไม่เห็นการอ้างอิงฉันสงสัยว่ามีใครบางคนสามารถยืนยันได้และถ้ามีเครื่องมือเอกสารเฉพาะ
pconcepcion

1
พวกเขาจะเพิ่มบางสิ่งในอนาคตแน่นอน// MARK:ความคิดเห็นจะถูกกำหนดไว้สำหรับเวอร์ชัน Xcode ในอนาคตด้วย
Leandros

ความคิดเห็นสไตล์ Doxygen ชนิดของการทำงานสำหรับวิธีการเรียนด้วย ~ ~ มาก ~ จำนวน caveats ฉันจะใช้สไตล์ Doxygen ต่อไป (เช่นเดียวกับที่ทำกับ Obj-C) และหวังว่า Xcode จะปรับปรุงการสนับสนุนสำหรับสิ่งเหล่านั้น
Pascal

1
สำหรับการจัดทำเอกสารพารามิเตอร์บล็อกดูstackoverflow.com/a/41970146/1054573
Leonard Pauli

คำตอบ:


386

ความคิดเห็นของเอกสารได้รับการสนับสนุนใน Xcode โดยกำเนิดการสร้างเอกสารที่แสดงผลอย่างฉลาดในวิธีใช้ด่วน (ทั้งในป๊อปโอเวอร์เมื่อ - คลิกสัญลักษณ์และใน Quick Help Inspector ⌥⌘2)

การแสดงความคิดเห็นเอกสารสัญลักษณ์ในขณะนี้มีพื้นฐานมาจากไวยากรณ์ Markdownเดียวกับที่ใช้โดยข้อคิดเห็นของสนามเด็กเล่นที่อุดมไปด้วยดังนั้นสิ่งที่คุณสามารถทำได้ในสนามเด็กเล่นตอนนี้สามารถนำมาใช้โดยตรงในเอกสารรหัสต้นฉบับ

สำหรับรายละเอียดของไวยากรณ์ดูMarkup การจัดรูปแบบการอ้างอิง โปรดทราบว่ามีความแตกต่างระหว่างไวยากรณ์สำหรับความคิดเห็นที่อุดมไปด้วยสนามเด็กเล่นและเอกสารสัญลักษณ์; สิ่งเหล่านี้ถูกระบุไว้ในเอกสาร (เช่นราคาบล็อกสามารถใช้ในสนามเด็กเล่นเท่านั้น)

ด้านล่างนี้เป็นตัวอย่างและรายการองค์ประกอบของไวยากรณ์ที่ทำงานกับข้อคิดเห็นเอกสารสัญลักษณ์ได้ในปัจจุบัน


อัพเดท

Xcode 7 beta 4 ~เพิ่ม " - Throws: ..." เป็นรายการในรายการระดับบนสุดซึ่งจะปรากฏข้างพารามิเตอร์และส่งคืนคำอธิบายในวิธีใช้ด่วน

Xcode 7 beta 1 ~การเปลี่ยนแปลงที่สำคัญบางอย่างกับไวยากรณ์ด้วย Swift 2 - ความคิดเห็นเอกสารประกอบในขณะนี้ขึ้นอยู่กับ Markdown (เช่นเดียวกับสนามเด็กเล่น)

Xcode 6.3 (6D570) ~ข้อความที่เยื้องในขณะนี้ได้รับการจัดรูปแบบเป็นบล็อคโค้ดโดยมีการเยื้องในภายหลัง ดูเหมือนจะเป็นไปไม่ได้ที่จะปล่อยให้บรรทัดว่างในบล็อกโค้ดดังกล่าว - พยายามทำเช่นนั้นส่งผลให้ข้อความถูกตรึงไว้ที่ท้ายบรรทัดสุดท้ายด้วยอักขระใด ๆ ในนั้น

Xcode 6.3 beta ~ Inline Code สามารถเพิ่มลงในข้อคิดเห็นเอกสารโดยใช้ backticks


ตัวอย่างสำหรับ 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 Documentation


ไวยากรณ์สำหรับ 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


คำสำคัญ

นอกเหนือจากการจัดรูปแบบมาร์กดาวน์แล้ว Xcode ยังจดจำคำสำคัญมาร์คอัปอื่น ๆ เพื่อแสดงอย่างเด่นชัดในวิธีใช้ด่วน คำหลักมาร์กอัปเหล่านี้ส่วนใหญ่ใช้รูปแบบ- <keyword>:(ข้อยกเว้นคือparameterซึ่งรวมถึงชื่อพารามิเตอร์ก่อนเครื่องหมายโคลอน) ซึ่งสามารถเขียนคำหลักด้วยตัวอักษรตัวพิมพ์ใหญ่ / ตัวพิมพ์เล็ก

สัญลักษณ์คำสำคัญมาตรา

คำหลักต่อไปนี้จะแสดงเป็นส่วนที่โดดเด่นในตัวแสดงวิธีใช้ด้านล่างส่วน "คำอธิบาย" และเหนือส่วน "ประกาศใน" เมื่อรวมไว้คำสั่งซื้อของพวกเขาจะได้รับการแก้ไขตามที่แสดงด้านล่างแม้ว่าคุณสามารถรวมไว้ในลำดับใดก็ได้ตามที่คุณต้องการในความคิดเห็นของคุณ

ดูรายการเอกสารครบถ้วนของส่วนคำหลักและการใช้งานของพวกเขาตั้งใจในส่วนสัญลักษณ์มาตราคำสั่งของมาร์กอัปการจัดรูปแบบการอ้างอิง

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

หรือคุณสามารถเขียนแต่ละพารามิเตอร์ด้วยวิธีนี้:

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

สัญลักษณ์คำอธิบายฟิลด์คำสำคัญ

รายการคำหลักต่อไปนี้จะแสดงเป็นส่วนหัวที่เป็นตัวหนาในส่วนของ "คำอธิบาย" ของตัวแสดงวิธีใช้ พวกเขาจะปรากฏตามลำดับที่คุณเขียนไว้เช่นเดียวกับส่วนที่เหลือของส่วน "คำอธิบาย"

รายการทั้งหมดถอดความจากบทความบล็อกยอดเยี่ยมนี้โดย Erica Sadun นอกจากนี้ยังดูรายการเอกสารครบถ้วนของคำและการใช้ตั้งใจของพวกเขาในสัญลักษณ์ส่วนของคำอธิบายฟิลด์คำสั่งของมาร์กอัปการจัดรูปแบบการอ้างอิง

การอ้างเหตุผล:

/// - 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
Leonardo

2
@uchuugaka หมายเลขจริงๆ มันอาจจะเป็นไปตาม reStructuredText ก่อนหน้านี้ แต่ในขณะที่ความคิดเห็นเอกสาร Xcode 7 จะขึ้นอยู่กับ Markdown ที่มีรูปแบบพื้นฐานเช่นเดียวกับความคิดเห็นสนามเด็กเล่น ดูบันทึกย่อประจำรุ่น Xcode 7สำหรับรายละเอียด
สจวร์

2
มีวิธีเชื่อมโยงไปยังฟังก์ชั่นอื่น ๆ ในไฟล์เดียวกันเช่น JavaDoc หรือไม่? ตัวอย่างเช่น "ดูmyOtherMethod(param1:)สำหรับฟังก์ชันการทำงานเพิ่มเติม"
Ben Leggiero

1
@BenLeggiero ใช่โดยใช้และ/// - Tag: otherMethod [otherMethod](x-source-tag://otherMethod)สำหรับรายละเอียดเพิ่มเติมโปรดดูคำตอบของฉัน
Clay Ellis

58

ต่อไปนี้คือสิ่งที่ใช้ในการบันทึกรหัส swift ใน 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

ในตัวอย่างข้างต้นสัญลักษณ์เครื่องหมายบวก (+) และลบ (-) จะทำหน้าที่เป็นสัญลักษณ์แสดงหัวข้อย่อยนอกเหนือจากเครื่องหมายดอกจันที่แสดง
Vince O'Sullivan

ดูเหมือนว่า///จำเป็นต้องมีบรรทัดความคิดเห็นว่างเปล่า ( ) ระหว่างข้อความอธิบายและบรรทัด:param:หรือ :returns:การข้ามสิ่งนี้ทำให้เกิด XCode (6.1.1 ณ เวลาที่เขียน) เพื่อรวมวิธีใช้พารามิเตอร์ในเนื้อหาหลักของคำอธิบายฟังก์ชัน
Robin Macharg

น่าเสียดายที่นี่ใช้ไม่ได้กับ 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 เทียบเท่า)

Objective-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ไฟล์ที่มีตอนจบ มันมีเอกสารแน่นอนเพราะไฟล์เหล่านี้มีเอกสารสำหรับ Swift UIKit / Foundation API น่าเสียดายที่ดูเหมือนว่าจะเป็นรูปแบบไฟล์ที่เป็นกรรมสิทธิ์สำหรับใช้ใน Documentation Viewer ใน Xcode




-1

บางทีมันอาจจะเป็นความคิดที่ดีที่จะมีตาบน AppleDoc หรือตัวเองของ Apple HeaderDocซึ่งไม่ได้รับการยอมรับเป็นอย่างมาก ฉันยังสามารถหาคำแนะนำ HeaderDoc ได้ในเทอร์มินัล Mavericks 10.9 (headerdoc2html)

ฉันขอแนะนำให้อ่าน " มีอะไรใหม่ใน Xcode " ล่าสุด (ไม่แน่ใจว่ายังอยู่ภายใต้ NDA) * ลิงก์ชี้ไปที่เวอร์ชัน Xcode 5.1 ซึ่งมีข้อมูลเกี่ยวกับ HeaderDoc ด้วย


-1

ในฐานะของ Xcode 5.0, Doxygen และ HeaderDoc โครงสร้างความคิดเห็นได้รับการสนับสนุน

แหล่ง


1
ฉันถามเกี่ยวกับ Swift ในกรณีนี้
pconcepcion

@pconcepcion คุณใช้ Swift ใน Xcode ไหม ใช่แล้ว
Matt Zanchelli

1
Matt จากสิ่งที่ฉันรู้ (ฉันอาจผิด) Swift ไม่รองรับจนถึง Xcode 6 เบต้าดังนั้นฉันไม่แน่ใจว่าเอกสารสำหรับ Xcode 5 ใช้ได้กับ Xcode 6 (และ Swift แล้ว)
pconcepcion

@pconcepcion มันใช้งานได้ ฉันใช้เอกสาร doxygen แบบเดียวกับที่ใช้ใน Objective-C และมันใช้งานได้ เหนือวิธีการหรือคุณสมบัติฉันใช้/// This is what the method does.ฯลฯ
Matt Zanchelli

ตกลงแล้วสิ่งที่คุณทดสอบบน Xcode 6 ฉันสับสนเพราะคุณกำลังพูดถึง Xcode 5 และลิงค์สำหรับ Xcode 5
pconcepcion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.