Swift는 문서 생성 기능을 지원합니까?


238

많은 언어 는 생성기 (예 : 또는 doxygen )가 동일한 코드를 구문 분석하여 코드 문서를 생성 할 수 있도록 문서 주석 을 지원 합니다.javadoc

Swift에 이와 같은 형식 문서 주석 기능이 있습니까?


목표 - C와 엑스 코드는 문서 주석을 허용 알고, 나는 애플이 가까운 미래 (단, 그것이 내가 증거가 없다, 단지 추측입니다)에서 신속한와 엑스 코드에이 옵션을 추가 할 것이라고 믿는다
Garoal

@ Δdeveloper 나는 똑같이 가정했지만 참조를 보지 못했을 때 누군가 그것을 확인할 수 있는지, 그리고 특정 문서 도구가 있는지 궁금합니다.
pconcepcion 2016 년

1
그들은 분명히 미래에 무언가를 추가 할 것이며, // MARK:주석은 미래의 Xcode 버전으로 예정되어 있습니다.
Leandros

Doxygen 스타일은 클래스 메소드에 대한 일종의 작업에 대해 몇 가지 ~ 많은 경고가 있습니다. 나는 Doxygen 스타일을 계속 사용하고 (Obj-C에서했던 것처럼) Xcode가 그에 대한 지원을 향상시키기를 바랍니다.
파스칼

1
블록 매개 변수를 문서화하려면 stackoverflow.com/a/41970146/1054573
Leonard Pauli의

답변:


386

문서 주석은 Xcode에서 기본적으로 지원되며 빠른 도움말 ( 심볼을 클릭 할 때 팝업 및 빠른 도움말 검사기 ⌥⌘2) 에서 스마트하게 렌더링 된 문서를 생성 합니다.

기호 문서 주석은 이제 풍부한 놀이터 주석에서 사용 된 것과 동일한 Markdown 구문을 기반으로 하므로 놀이터에서 수행 할 수있는 많은 작업을 이제 소스 코드 문서에서 직접 사용할 수 있습니다.

구문에 대한 자세한 내용은 마크 업 서식 참조를 참조하십시오 . 풍부한 운동장 의견과 기호 문서에 대한 구문에는 약간의 차이가 있습니다. 이것들은 문서에서 지적됩니다 (예 : 블록 따옴표는 놀이터에서만 사용할 수 있습니다).

아래는 기호 문서 주석에 현재 작동하는 구문 요소의 예와 목록입니다.


업데이트

Xcode 7 베타 4 ~ " - Throws: ..."를 최상위 목록 항목으로 추가 하여 매개 변수와 함께 표시되며 빠른 도움말의 설명을 반환합니다.

Xcode 7 베타 1 ~ Swift 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."
}

신속한 문서 빠른 도움말


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)
///    }

최소 4 개의 공백 들여 쓰기가 필요합니다.


인라인 요소

강조 (이탈리아) :

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

 문서 내보내기

오픈 소스 명령 줄 유틸리티 인 Jazzy를 사용하여 인라인 문서에서 HTML 문서 (Apple 자체 문서를 모방하도록 설계됨)를 생성 할 수 있습니다 .

$ [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

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)가 함수 설명의 본문에 매개 변수 도움말을 포함시킵니다.
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 이름을 클릭하고 옵션을 클릭하십시오 :)


11

ShakenManChild가 peopr 솔루션을 제공했음을 확인할 수 있습니다

설명 아래에 빈 줄이 있는지 확인하십시오!

잘못된 상황

적절한 방법

또 다른 방법

다른 주석 스타일


8

예. 기본 공통 (Obj-C와 동등한 스 니펫을 만들었습니다)

목표 -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에 대한 문서가 포함되어 있기 때문에 문서가 있습니다. 불행히도 Xcode의 문서 뷰어에서 사용할 독점 파일 형식 인 것 같습니다.




-1

AppleDoc 또는 Apple 자체의 HeaderDoc 을 잘 인식하지 않는 것이 좋습니다. 10.9 Mavericks 터미널 (headerdoc2html)에서 여전히 HeaderDoc 힌트를 찾을 수 있습니다

최신 " Xcode의 새로운 기능 "* (여전히 NDA 상태인지 확실하지 않음) 을 읽어 보는 것이 좋습니다. * 링크에는 Xcode 5.1 버전에 대한 정보도 포함되어 있습니다. HeaderDoc에 대한 정보도 포함되어 있습니다.


-1

Xcode 5.0부터 Doxygen 및 HeaderDoc 구조적 주석이 지원됩니다.

출처


1
글쎄, 나는이 경우 스위프트에 대해 물었다.
pconcepcion

@pconcepcion Xcode에서 Swift를 사용하고 있습니까? 그럼요
매트 Zanchelli

1
매트, 나는 (내가 잘못 될 수있다) 스위프트을 알고 난 그래서, 엑스 코드 6 베타 버전까지 지원되지 않는에서하지 않도록 엑스 코드 5 그것에 대한 문서는 엑스 코드 6 (다음 스위프트에 대한) 유효한 경우
pconcepcion

@ pconcepcion 작동합니다. Objective-C에서했던 것과 같은 스타일의 doxygen 문서를 사용하고 있으며 작동합니다. 방법이나 속성 위에서 나는 /// This is what the method does.등을 사용합니다 .
Matt Zanchelli

좋아, 다음 것은 당신이 당신이 엑스 코드 5에 대해 얘기했다 때문에 혼란스러워했다 엑스 코드 6. 그것을 테스트 한 것입니다 및 링크는 엑스 코드 5입니다
pconcepcion
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.