Swift có hỗ trợ tạo tài liệu không?


238

Nhiều ngôn ngữ hỗ trợ nhận xét tài liệu để cho phép trình tạo (như javadochoặc doxygen ) tạo tài liệu mã bằng cách phân tích cùng mã đó.

Swift có bất kỳ tính năng nhận xét tài liệu loại như thế này?


Biết rằng Xcode với object-c cho phép nhận xét tài liệu, tôi tin rằng Apple sẽ thêm tùy chọn này vào Xcode trong tương lai gần (tuy nhiên, đó chỉ là giả định, tôi không có bằng chứng)
Garoal

@ Δdeveloper Tôi đã giả sử như vậy, nhưng vì tôi chưa thấy bất kỳ tài liệu tham khảo nào, tôi đã tự hỏi liệu ai đó có thể xác nhận nó hay không và liệu sẽ có bất kỳ công cụ tài liệu cụ thể nào không.
pconcepcion

1
Họ chắc chắn sẽ thêm một cái gì đó trong tương lai, // MARK:bình luận cũng được lên kế hoạch cho phiên bản Xcode tương lai.
Leandros

Nhận xét kiểu Doxygen loại công việc cho các phương thức lớp, với ~ vài ~ rất nhiều cảnh báo. Tôi cho một người sẽ tiếp tục sử dụng phong cách Doxygen (giống như tôi đã làm cho Obj-C) và hy vọng Xcode cải thiện sự hỗ trợ của nó cho những người đó.
Pascal

1
Để ghi lại các tham số khối, xem stackoverflow.com/a/41970146/1054573
Leonard Pauli

Câu trả lời:


386

Nhận xét tài liệu được hỗ trợ nguyên bản trong Xcode, tạo tài liệu được hiển thị thông minh trong Trợ giúp nhanh (cả trong biểu tượng bật lên khi bật biểu tượng và trong Trình kiểm tra trợ giúp nhanh ⌥⌘2).

Nhận xét tài liệu biểu tượng hiện được dựa trên cùng một cú pháp Markdown được sử dụng bởi các nhận xét sân chơi phong phú, do đó, rất nhiều điều bạn có thể làm trong các sân chơi hiện có thể được sử dụng trực tiếp trong tài liệu mã nguồn.

Để biết chi tiết đầy đủ về cú pháp, xem Tham chiếu định dạng đánh dấu . Lưu ý rằng có một số khác biệt giữa cú pháp cho tài liệu biểu tượng & bình luận sân chơi phong phú; những điều này được chỉ ra trong tài liệu (ví dụ: trích dẫn khối chỉ có thể được sử dụng trong các sân chơi).

Dưới đây là một ví dụ và danh sách các yếu tố cú pháp hiện đang hoạt động cho các nhận xét tài liệu ký hiệu.


Cập nhật

Xcode 7 beta 4 ~ Đã thêm " - Throws: ..." dưới dạng mục danh sách cấp cao nhất xuất hiện cùng với các tham số và trả về mô tả trong Trợ giúp nhanh.

Xcode 7 beta 1 ~ Một số thay đổi đáng kể về cú pháp với Swift 2 - nhận xét tài liệu hiện dựa trên Markdown (giống như sân chơi).

Xcode 6.3 (6D570) ~ Văn bản thụt lề hiện được định dạng dưới dạng khối mã, với các vết lõm tiếp theo được lồng vào nhau. Dường như không thể để một dòng trống trong một khối mã như vậy - cố gắng làm như vậy dẫn đến việc văn bản được xử lý ở cuối dòng cuối cùng với bất kỳ ký tự nào trong đó.

Xcode 6.3 beta ~ Mã nội tuyến hiện có thể được thêm vào nhận xét tài liệu bằng cách sử dụng backticks.


Ví dụ cho 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 Tài liệu trợ giúp nhanh


Cú pháp cho Swift 2 (dựa trên Markdown )


Bình luận phong cách

Cả hai bình luận kiểu ///(nội tuyến) và /** */(khối) đều được hỗ trợ để tạo bình luận tài liệu. Trong khi cá nhân tôi thích phong cách /** */bình luận trực quan , thụt lề tự động của Xcode có thể phá hỏng định dạng cho kiểu nhận xét này khi sao chép / dán vì nó xóa khoảng trắng hàng đầu. Ví dụ:

/**
See sample usage:

    let x = method(blah)
*/

Khi dán, thụt khối mã được loại bỏ và nó không còn được hiển thị dưới dạng mã:

/**
See sample usage:

let x = method(blah)
*/

Vì lý do này, tôi thường sử dụng ///và sẽ sử dụng nó cho phần còn lại của các ví dụ trong câu trả lời này.


Các yếu tố khối

Phần mở đầu:

/// # My Heading

hoặc là

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


Phân nhóm:

/// ## My Subheading

hoặc là

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


Quy tắc ngang:

/// ---


Danh sách không có thứ tự (gạch đầu dòng):

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

Bạn cũng có thể sử dụng +hoặc *cho các danh sách không có thứ tự, nó chỉ cần nhất quán.


Danh sách được sắp xếp (đánh số):

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


Khối mã:

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

Một vết lõm của ít nhất bốn không gian được yêu cầu.


Yếu tố nội tuyến

Nhấn mạnh (in nghiêng):

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


Mạnh (đậm):

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

Lưu ý rằng bạn không thể trộn dấu hoa thị ( *) và dấu gạch dưới ( _) trên cùng một phần tử.


Mã nội tuyến:

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


Liên kết:

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


Hình ảnh:

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

URL có thể là URL web (sử dụng "http: //") hoặc URL đường dẫn tệp tuyệt đối (tôi dường như không thể có đường dẫn tệp tương đối để hoạt động).

Các URL cho liên kết và hình ảnh cũng có thể được tách ra khỏi thành phần nội tuyến để giữ tất cả các URL ở một nơi, có thể quản lý được:

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


Từ khóa

Ngoài định dạng Markdown, Xcode nhận ra các từ khóa đánh dấu khác để hiển thị nổi bật trong Trợ giúp nhanh. Các từ khóa đánh dấu này chủ yếu có định dạng - <keyword>:(ngoại lệ parameter, bao gồm tên tham số trước dấu hai chấm), trong đó từ khóa có thể được viết với bất kỳ sự kết hợp nào của các ký tự viết hoa / viết thường.

Từ khóa Phần biểu tượng

Các từ khóa sau được hiển thị dưới dạng các phần nổi bật trong trình xem trợ giúp, bên dưới phần "Mô tả" và phía trên phần "Khai báo trong". Khi được bao gồm, thứ tự của chúng được cố định như hiển thị bên dưới mặc dù bạn có thể đưa chúng vào bất kỳ thứ tự nào bạn muốn trong nhận xét của mình.

Xem danh sách tài liệu đầy đủ của các từ khóa phần và mục đích sử dụng của chúng trong phần Lệnh biểu tượng của tham chiếu định dạng đánh dấu .

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

Ngoài ra, bạn có thể viết từng tham số theo cách này:

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

Biểu tượng Mô tả Từ khóa trường

Danh sách các từ khóa sau đây được hiển thị dưới dạng các tiêu đề in đậm trong phần "Mô tả" của trình xem trợ giúp. Chúng sẽ xuất hiện theo bất cứ thứ tự nào bạn viết chúng, như với phần còn lại của phần "Mô tả".

Danh sách đầy đủ được diễn giải từ bài viết blog tuyệt vời này của Erica Sadun. Đồng thời xem danh sách từ khóa được ghi lại đầy đủ và mục đích sử dụng của chúng trong phần Lệnh mô tả trường biểu tượng của Tham chiếu định dạng đánh dấu .

Các bản phân phối:

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

Khả dụng:

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

Lời khuyên:

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

Nhà nước phát triển:

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

Chất lượng thực hiện:

/// - complexity:

Chức năng ngữ nghĩa:

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

Tham chiếu chéo:

/// - seealso:

 Tài liệu xuất khẩu

Tài liệu HTML (được thiết kế để bắt chước tài liệu riêng của Apple) có thể được tạo từ tài liệu nội tuyến bằng cách sử dụng Jazzy , một tiện ích dòng lệnh nguồn mở.

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

Ví dụ bảng điều khiển được lấy từ bài viết NSHipster này


1
Có vẻ như hành vi đã thay đổi trong phiên bản cuối cùng của Xcode 6.3 (6D570). Các khối thụt lề hiện được định dạng dưới dạng các khối mã và có thể được lồng với hơn hai cấp độ.
NexD.

2
Mô tả rất hay về cú pháp tài liệu Swift 2.0. Bạn nên cập nhật bài đăng để bao gồm/// - todo: keyword
Leonardo

2
@uchuugaka Thật ra không. Nó có thể đã được dựa trên reSturationuredText trước đây, nhưng kể từ khi nhận xét tài liệu Xcode 7 dựa trên Markdown, với định dạng cơ bản giống như nhận xét về sân chơi. Xem Ghi chú phát hành Xcode 7 để biết chi tiết.
Stuart

2
Có cách nào để liên kết đến các chức năng khác trong cùng một tệp, như JavaDoc không? Ví dụ: "xem myOtherMethod(param1:)chức năng mở rộng"
Ben Leggiero

1
@BenLeggiero, vâng, bằng cách sử dụng /// - Tag: otherMethod[otherMethod](x-source-tag://otherMethod). Để biết thêm chi tiết, xem câu trả lời của tôi .
Clay Ellis

58

Dưới đây là một số điều hoạt động để ghi lại mã nhanh chóng trong Xcode 6. Nó rất có lỗi và nhạy cảm với dấu hai chấm, nhưng tốt hơn là không có gì:

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

Ở trên được hiển thị trong Trợ giúp nhanh như bạn mong đợi với các danh sách số được định dạng, các dấu đầu dòng, tham số và tài liệu giá trị trả về.

Không ai trong số này được ghi lại - nộp một Radar để giúp họ đi cùng.


2
Mattt Thompson đã viết một bài báo về điều này , và ông nghĩ rằng đây là reStructuredText.
Eonil

Trong ví dụ trên, các biểu tượng dấu cộng (+) và dấu trừ (-) cũng sẽ đóng vai trò là các dấu đầu dòng, ngoài các dấu hoa thị được hiển thị.
Vince O'Sullivan

Dường như một dòng chú thích ( ///) trống được yêu cầu giữa bất kỳ văn bản giải thích và dòng :param:hoặc :returns:. Việc bỏ qua điều này khiến XCode (6.1.1 tại thời điểm viết) bao gồm trợ giúp tham số trong phần chính của mô tả chức năng.
Robin Macharg 11/03/2015

Thật không may, điều này không hoạt động với Xcode 7 Beta. Hy vọng họ sẽ sửa nó trong một phiên bản phát hành.
stevo.mit

1
Xcode 7 đã thông qua một cú pháp khác nhau: ericasadun.com/2015/06/14/swift-header-documentation-in-xcode-7
Zmey

41

Mới trong Xcode 8 , bạn có thể chọn một phương thức như thế này

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

Sau đó nhấn command+ option+/ hoặc chọn "Cấu trúc" - "Thêm tài liệu" từ menu "Trình chỉnh sửa" của Xcode và nó sẽ tạo mẫu nhận xét sau cho bạn:

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

Cảm ơn vì điều đó. Tôi sẽ chỉ đề cập rằng phím tắt mà bạn chỉ ra dường như không hoạt động trên bàn phím tiếng Đan Mạch, trong đó "/" là shift- "7".
RenniePet

27

Swift bao gồm xử lý bình luận "///" (mặc dù có lẽ chưa phải là tất cả).

Viết một cái gì đó như:

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

}

Sau đó, tùy chọn bấm vào tên func và voilà :)


11

Tôi có thể xác nhận rằng ShakenManChild đã cung cấp giải pháp peopr

Chỉ cần chắc chắn rằng, bạn có một dòng trống bên dưới mô tả!

Một tình huống không hợp lệ

Cách thích hợp

Cách khác

Một phong cách bình luận khác


8

Đúng. Cơ sở chung (Tôi đã tạo đoạn trích cho nó với tương đương Obj-C)

Mục tiêu-C:

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

 @discussion <#Description#>

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

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

Nhanh

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

<#Description#>

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

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


6

Tôi đã tìm thấy một cái gì đó thú vị, đào trong nhị phân Xcode. Tập tin với kết thúc .swiftdoc. Nó chắc chắn có tài liệu, bởi vì các tệp này chứa tài liệu cho Swift UIKit / Foundation API, thật không may, nó dường như là định dạng tệp độc quyền, để sử dụng trong trình xem Tài liệu trong Xcode.




-1

Có lẽ đó là một ý tưởng tốt để có một mắt trên AppleDoc hay riêng của Apple HeaderDoc mà không được công nhận rất nhiều. Tôi vẫn có thể tìm thấy một số gợi ý HeaderDoc trong thiết bị đầu cuối 10.9 Mavericks (headerdoc2html)

Tôi khuyên bạn nên đọc " What's New in Xcode " * (không chắc là nó vẫn còn trong NDA) * Liên kết trỏ đến phiên bản Xcode 5.1 cũng có chứa thông tin về HeaderDoc.


-1

Kể từ Xcode 5.0, các nhận xét có cấu trúc Doxygen và HeaderDoc được hỗ trợ.

Nguồn


1
Chà, tôi đã hỏi về Swift trong trường hợp này.
pconcepcion

@pconcepcion Bạn có đang sử dụng Swift trong Xcode không? Vậy thì được.
Matt Zanchelli

1
Matt, từ những gì tôi biết (tôi có thể sai) Swift không được hỗ trợ cho đến Xcode 6 beta, vì vậy tôi không chắc liệu tài liệu về Xcode 5 có hợp lệ với Xcode 6 (và sau đó là Swift)
pconcepcion

@pconcepcion Nó hoạt động. Tôi đã sử dụng tài liệu doxygen kiểu giống như tôi đã làm trong Objective-C và nó hoạt động. Trên một phương pháp hoặc tài sản, tôi sử dụng, /// This is what the method does.v.v.
Matt Zanchelli

Ok, điều đáng nói là bạn đã thử nghiệm nó trên Xcode 6. Tôi đã bối rối vì bạn đang nói về Xcode 5 và liên kết dành cho Xcode 5
pconcepcion
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.