문법 정리 (Summary of the Grammar)

어휘 구조 (Lexical Structure)

GRAMMAR OF WHITESPACE whitespace → whitespace-item whitespace opt_{opt} whitespace-item → line-break whitespace-item → inline-space whitespace-item → comment whitespace-item → multiline-comment whitespace-item → U+0000, U+000B, 또는 U+000C line-break → U+000A line-break → U+000D line-break → U+000D 다음에 U+000A inline-spaces → inline-space inline-spaces opt_{opt} inline-space → U+0009 또는 U+0020 comment → // comment-text line-break multiline-comment → /* multiline-comment-text */ comment-text → comment-text-item comment-text opt_{opt} comment-text-item → U+000A 또는 U+000D 을 제외한 모든 유니코드 스칼라 값 multiline-comment-text → multiline-comment-text-item multiline-comment-text opt_{opt} multiline-comment-text-item → multiline-comment multiline-comment-text-item → comment-text-item multiline-comment-text-item → /* 또는 */ 을 제외한 모든 유니코드 스칼라 값

GRAMMAR OF AN IDENTIFIER identifier → identifier-head identifier-characters opt_{opt} identifier → identifier-head identifier-characters opt_{opt} identifier → implicit-parameter-name identifier → property-wrapper-projection identifier-list → identifier | identifier , identifier-list identifier-head → A 부터 Z 까지 대문자 또는 소문자 identifier-head → _ identifier-head → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, 또는 U+00B7–U+00BA identifier-head → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, 또는 U+00F8–U+00FF identifier-head → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, 또는 U+180F–U+1DBF identifier-head → U+1E00–U+1FFF identifier-head → U+200B–U+200D, U+202A–U+202E, U+203F–U+2040, U+2054, 또는 U+2060–U+206F identifier-head → U+2070–U+20CF, U+2100–U+218F, U+2460–U+24FF, 또는 U+2776–U+2793 identifier-head → U+2C00–U+2DFF 또는 U+2E80–U+2FFF identifier-head → U+3004–U+3007, U+3021–U+302F, U+3031–U+303F, 또는 U+3040–U+D7FF identifier-head → U+F900–U+FD3D, U+FD40–U+FDCF, U+FDF0–U+FE1F, 또는 U+FE30–U+FE44 identifier-head → U+FE47–U+FFFD identifier-head → U+10000–U+1FFFD, U+20000–U+2FFFD, U+30000–U+3FFFD, 또는 U+40000–U+4FFFD identifier-head → U+50000–U+5FFFD, U+60000–U+6FFFD, U+70000–U+7FFFD, 또는 U+80000–U+8FFFD identifier-head → U+90000–U+9FFFD, U+A0000–U+AFFFD, U+B0000–U+BFFFD, 또는 U+C0000–U+CFFFD identifier-head → U+D0000–U+DFFFD 또는 U+E0000–U+EFFFD identifier-character → 0에서 9까지의 숫자 identifier-character → U+0300–U+036F, U+1DC0–U+1DFF, U+20D0–U+20FF, 또는 U+FE20–U+FE2F identifier-character → identifier-head identifier-characters → identifier-character identifier-characters opt_{opt} implicit-parameter-name → $ decimal-digits property-wrapper-projection → $ identifier-characters

GRAMMAR OF A LITERAL literal → numeric-literal | string-literal | boolean-literal | nil-literal numeric-literal → - opt_{opt} integer-literal | - opt_{opt} floating-point-literal boolean-literal → true | false nil-literal → nil

GRAMMAR OF AN INTEGER LITERAL integer-literal → binary-literal integer-literal → octal-literal integer-literal → decimal-literal integer-literal → hexadecimal-literal binary-literal → 0b binary-digit binary-literal-characters opt_{opt} binary-digit → 0 또는 1 숫자 binary-literal-character → binary-digit | _ binary-literal-characters → binary-literal-character binary-literal-characters opt_{opt} octal-literal → 0o octal-digit octal-literal-characters opt_{opt} octal-digit → 0에서 7까지의 숫자 octal-literal-character → octal-digit | _ octal-literal-characters → octal-literal-character octal-literal-characters opt_{opt} decimal-literal → decimal-digit decimal-literal-characters opt_{opt} decimal-digit → 0에서 9까지의 숫자 decimal-digits → decimal-digit decimal-digits opt_{opt} decimal-literal-character → decimal-digit | _ decimal-literal-characters → decimal-literal-character decimal-literal-characters opt_{opt} hexadecimal-literal → 0x hexadecimal-digit hexadecimal-literal-characters opt_{opt} hexadecimal-digit → 0에서 9까지의 숫자, a 에서 f, 또는 A 에서 F hexadecimal-literal-character → hexadecimal-digit | _ hexadecimal-literal-characters → hexadecimal-literal-character hexadecimal-literal-characters opt_{opt}

GRAMMAR OF A FLOATING-POINT LITERAL floating-point-literal → decimal-literal decimal-fraction opt_{opt} decimal-exponent opt_{opt} floating-point-literal → hexadecimal-literal hexadecimal-fraction opt_{opt} hexadecimal-exponent decimal-fraction → . decimal-literal decimal-exponent → floating-point-e sign opt_{opt} decimal-literal hexadecimal-fraction → . hexadecimal-digit hexadecimal-literal-characters opt_{opt} hexadecimal-exponent → floating-point-p sign opt_{opt} decimal-literal floating-point-e → e | E floating-point-p → p | P sign → + | -

GRAMMAR OF A STRING LITERAL string-literal → static-string-literal | interpolated-string-literal string-literal-opening-delimiter → extended-string-literal-delimiter opt_{opt} " string-literal-closing-delimiter → " extended-string-literal-delimiter opt_{opt} static-string-literal → string-literal-opening-delimiter quoted-text opt_{opt} string-literal-closing-delimiter static-string-literal → multiline-string-literal-opening-delimiter multiline-quoted-text opt_{opt} multiline-string-literal-closing-delimiter multiline-string-literal-opening-delimiter → extended-string-literal-delimiter """ multiline-string-literal-closing-delimiter → """ extended-string-literal-delimiter extended-string-literal-delimiter → # extended-string-literal-delimiter opt_{opt} quoted-text → quoted-text-item quoted-text opt_{opt} quoted-text-item → escaped-character quoted-text-item → ", \, U+000A, 또는 U+000D 을 제외한 모든 유니코드 스칼라 값 multiline-quoted-text → multiline-quoted-text-item multiline-quoted-text opt_{opt} multiline-quoted-text-item → escaped-character multiline-quoted-text-item → \ 을 제외한 모든 유니코드 스칼라 값 multiline-quoted-text-item → escaped-newline interpolated-string-literal → string-literal-opening-delimiter interpolated-text opt_{opt} string-literal-closing-delimiter interpolated-string-literal → multiline-string-literal-opening-delimiter multiline-interpolated-text opt_{opt} multiline-string-literal-closing-delimiter interpolated-text → interpolated-text-item interpolated-text opt_{opt} interpolated-text-item → \( expression ) | quoted-text-item multiline-interpolated-text → multiline-interpolated-text-item multiline-interpolated-text opt_{opt} multiline-interpolated-text-item → \( expression ) | multiline-quoted-text-item escape-sequence → \ extended-string-literal-delimiter escaped-character → escape-sequence 0 | escape-sequence \ | escape-sequence t | escape-sequence n | escape-sequence r | escape-sequence " | escape-sequence ' escaped-character → escape-sequence u { unicode-scalar-digits } unicode-scalar-digits → 1 에서 8 자리의 16진수 escaped-newline → escape-sequence inline-spaces opt_{opt} line-break

GRAMMAR OF OPERATORS operator → operator-head operator-characters opt_{opt} operator → dot-operator-head dot-operator-characters operator-head → / | = | - | + | ! | * | % | < | > | & | | | ^ | ~ | ? operator-head → U+00A1–U+00A7 operator-head → U+00A9 또는 U+00AB operator-head → U+00AC 또는 U+00AE operator-head → U+00B0–U+00B1 operator-head → U+00B6, U+00BB, U+00BF, U+00D7, 또는 U+00F7 operator-head → U+2016–U+2017 operator-head → U+2020–U+2027 operator-head → U+2030–U+203E operator-head → U+2041–U+2053 operator-head → U+2055–U+205E operator-head → U+2190–U+23FF operator-head → U+2500–U+2775 operator-head → U+2794–U+2BFF operator-head → U+2E00–U+2E7F operator-head → U+3001–U+3003 operator-head → U+3008–U+3020 operator-head → U+3030 operator-character → operator-head operator-character → U+0300–U+036F operator-character → U+1DC0–U+1DFF operator-character → U+20D0–U+20FF operator-character → U+FE00–U+FE0F operator-character → U+FE20–U+FE2F operator-character → U+E0100–U+E01EF operator-characters → operator-character operator-characters opt_{opt} dot-operator-head → . dot-operator-character → . | operator-character dot-operator-characters → dot-operator-character dot-operator-characters opt_{opt} binary-operator → operator prefix-operator → operator postfix-operator → operator

타입 (Types)

GRAMMAR OF A TYPE type → function-type type → array-type type → dictionary-type type → type-identifier type → tuple-type type → optional-type type → implicitly-unwrapped-optional-type type → protocol-composition-type type → opaque-type type → metatype-type type → any-type type → self-type type → ( type )

GRAMMAR OF A TYPE ANNOTATION type-annotation → : attributes opt_{opt} inout opt_{opt} type

GRAMMAR OF A TYPE IDENTIFIER type-identifier → type-name generic-argument-clause opt_{opt} | type-name generic-argument-clause opt_{opt} .type-identifier type-name → identifier

GRAMMAR OF A TUPLE TYPE tuple-type → ( ) | ( tuple-type-element , tuple-type-element-list ) tuple-type-element-list → tuple-type-element | tuple-type-element , tuple-type-element-list tuple-type-element → element-name type-annotation | type element-name → identifier

GRAMMAR OF A FUNCTION TYPE function-type → attributes opt_{opt} function-type-argument-clause throws opt_{opt} -> type function-type-argument-clause → ( ) function-type-argument-clause → ( function-type-argument-list ... opt_{opt} ) function-type-argument-list → function-type-argument | function-type-argument , function-type-argument-list function-type-argument → attributes opt_{opt} inout opt_{opt} type | argument-label type-annotation argument-label → identifier

GRAMMAR OF AN ARRAY TYPE array-type → [ type ]

GRAMMAR OF A DICTIONARY TYPE dictionary-type → [ type : type ]

GRAMMAR OF AN OPTIONAL TYPE optional-type → type ?

GRAMMAR OF AN IMPLICITLY UNWRAPPED OPTIONAL TYPE implicitly-unwrapped-optional-type → type !

GRAMMAR OF A PROTOCOL COMPOSITION TYPE protocol-composition-type → type-identifier & protocol-composition-continuation protocol-composition-continuation → type-identifier | protocol-composition-type

GRAMMAR OF AN OPAQUE TYPE opaque-type → some type

GRAMMAR OF A METATYPE TYPE metatype-type → type . Type | type . Protocol

GRAMMAR OF AN ANY TYPE any-type → Any

GRAMMAR OF A SELF TYPE self-type → Self

GRAMMAR OF A TYPE INHERITANCE CLAUSE type-inheritance-clause → : type-inheritance-list type-inheritance-list → type-identifier | type-identifier , type-inheritance-list

표현식 (Expressions)

GRAMMAR OF AN EXPRESSION expression → try-operator opt_{opt} await-operator opt_{opt} prefix-expression binary-expressions opt_{opt} expression-list → expression | expression , expression-list

GRAMMAR OF A PREFIX EXPRESSION prefix-expression → prefix-operator opt_{opt} postfix-expression prefix-expression → in-out-expression

GRAMMAR OF AN IN-OUT EXPRESSION in-out-expression → & identifier

GRAMMAR OF A TRY EXPRESSION try-operator → try | try ? | try !

GRAMMAR OF AN AWAIT EXPRESSION await-operator → await

GRAMMAR OF A BINARY EXPRESSION binary-expression → binary-operator prefix-expression binary-expression → assignment-operator try-operator opt_{opt} prefix-expression binary-expression → conditional-operator try-operator opt_{opt} prefix-expression binary-expression → type-casting-operator binary-expressions → binary-expression binary-expressions opt_{opt}

GRAMMAR OF AN ASSIGNMENT OPERATOR assignment-operator → =

GRAMMAR OF A CONDITIONAL OPERATOR conditional-operator → ? expression :

GRAMMAR OF A TYPE-CASTING OPERATOR type-casting-operator → is type type-casting-operator → as type type-casting-operator → as ? type type-casting-operator → as ! type

GRAMMAR OF A PRIMARY EXPRESSION primary-expression → identifier generic-argument-clause opt_{opt} primary-expression → literal-expression primary-expression → self-expression primary-expression → superclass-expression primary-expression → closure-expression primary-expression → parenthesized-expression primary-expression → tuple-expression primary-expression → implicit-member-expression primary-expression → wildcard-expression primary-expression → key-path-expression primary-expression → selector-expression primary-expression → key-path-string-expression

GRAMMAR OF A LITERAL EXPRESSION literal-expression → literal literal-expression → array-literal | dictionary-literal | playground-literal literal-expression → #file | #fileID | #filePath literal-expression → #line | #column | #function | #dsohandle array-literal → [ array-literal-items opt_{opt} ] array-literal-items → array-literal-item , opt_{opt} | array-literal-item , array-literal-items array-literal-item → expression dictionary-literal → [ dictionary-literal-items ] | [ : ] dictionary-literal-items → dictionary-literal-item , opt_{opt} | dictionary-literal-item , dictionary-literal-items dictionary-literal-item → expression : expression playground-literal → #colorLiteral ( red : expression , green : expression , blue :expression , alpha : expression ) playground-literal → #fileLiteral ( resourceName : expression ) playground-literal → #imageLiteral ( resourceName : expression )

GRAMMAR OF A SELF EXPRESSION self-expression → self | self-method-expression | self-subscript-expression | self-initializer-expression self-method-expression → self . identifier self-subscript-expression → self [ function-call-argument-list ] self-initializer-expression → self . init

GRAMMAR OF A SUPERCLASS EXPRESSION superclass-expression → superclass-method-expression | superclass-subscript-expression | superclass-initializer-expression superclass-method-expression → super . identifier superclass-subscript-expression → super [ function-call-argument-list ] superclass-initializer-expression → super . init

GRAMMAR OF A CLOSURE EXPRESSION closure-expression → { closure-signature opt_{opt} statements opt_{opt} } closure-signature → capture-list opt_{opt} closure-parameter-clause throws opt_{opt} function-result opt_{opt} in closure-signature → capture-list in closure-parameter-clause → ( ) | ( closure-parameter-list ) | identifier-list closure-parameter-list → closure-parameter | closure-parameter , closure-parameter-list closure-parameter → closure-parameter-name type-annotation opt_{opt} closure-parameter → closure-parameter-name type-annotation ... closure-parameter-name → identifier capture-list → [ capture-list-items ] capture-list-items → capture-list-item | capture-list-item , capture-list-items capture-list-item → capture-specifier opt_{opt} identifier capture-list-item → capture-specifier opt_{opt} identifier = expression capture-list-item → capture-specifier opt_{opt} self-expression capture-specifier → weak | unowned | unowned(safe) | unowned(unsafe)

GRAMMAR OF A IMPLICIT MEMBER EXPRESSION implicit-member-expression → . identifier implicit-member-expression → . identifier . postfix-expression

GRAMMAR OF A PARENTHESIZED EXPRESSION parenthesized-expression → ( expression )

GRAMMAR OF A TUPLE EXPRESSION tuple-expression → ( ) | ( tuple-element , tuple-element-list ) tuple-element-list → tuple-element | tuple-element , tuple-element-list tuple-element → expression | identifier : expression

GRAMMAR OF A WILDCARD EXPRESSION wildcard-expression → _

GRAMMAR OF A KEY-PATH EXPRESSION key-path-expression → \ type opt_{opt} . key-path-components key-path-components → key-path-component | key-path-component . key-path-components key-path-component → identifier key-path-postfixes opt_{opt} | key-path-postfixes key-path-postfixes → key-path-postfix key-path-postfixes opt_{opt} key-path-postfix → ? | ! | self | [ function-call-argument-list ]

GRAMMAR OF A SELECTOR EXPRESSION selector-expression → #selector ( expression ) selector-expression → #selector ( getter: expression ) selector-expression → #selector ( setter: expression )

GRAMMAR OF A KEY-PATH STRING EXPRESSION key-path-string-expression → #keyPath ( expression )

GRAMMAR OF A POSTFIX EXPRESSION postfix-expression → primary-expression postfix-expression → postfix-expression postfix-operator postfix-expression → function-call-expression postfix-expression → initializer-expression postfix-expression → explicit-member-expression postfix-expression → postfix-self-expression postfix-expression → subscript-expression postfix-expression → forced-value-expression postfix-expression → optional-chaining-expression

GRAMMAR OF A FUNCTION CALL EXPRESSION function-call-expression → postfix-expression function-call-argument-clause function-call-expression → postfix-expression function-call-argument-clause opt_{opt} trailing-closures function-call-argument-clause → ( ) | ( function-call-argument-list ) function-call-argument-list → function-call-argument | function-call-argument , function-call-argument-list function-call-argument → expression | identifier : expression function-call-argument → operator | identifier : operator trailing-closures → closure-expression labeled-trailing-closures opt_{opt} labeled-trailing-closures → labeled-trailing-closure labeled-trailing-closures opt_{opt} labeled-trailing-closure → identifier : closure-expression

GRAMMAR OF AN INITIALIZER EXPRESSION initializer-expression → postfix-expression . init initializer-expression → postfix-expression . init ( argument-names )

GRAMMAR OF AN EXPLICIT MEMBER EXPRESSION explicit-member-expression → postfix-expression . decimal-digits explicit-member-expression → postfix-expression . identifier generic-argument-clause opt_{opt} explicit-member-expression → postfix-expression . identifier ( argument-names ) argument-names → argument-name argument-names opt_{opt} argument-name → identifier :

GRAMMAR OF A POSTFIX SELF EXPRESSION postfix-self-expression → postfix-expression . self

GRAMMAR OF A SUBSCRIPT EXPRESSION subscript-expression → postfix-expression [ function-call-argument-list ]

GRAMMAR OF A FORCED-VALUE EXPRESSION forced-value-expression → postfix-expression !

GRAMMAR OF AN OPTIONAL-CHAINING EXPRESSION optional-chaining-expression → postfix-expression ?

구문 (Statements)

GRAMMAR OF A STATEMENT statement → expression ; opt_{opt} statement → declaration ; opt_{opt} statement → loop-statement ; opt_{opt} statement → branch-statement ; opt_{opt} statement → labeled-statement ; opt_{opt} statement → control-transfer-statement ; opt_{opt} statement → defer-statement ; opt_{opt} statement → do-statement ; opt_{opt} statement → compiler-control-statement statements → statement statements opt_{opt}

GRAMMAR OF A LOOP STATEMENT loop-statement → for-in-statement loop-statement → while-statement loop-statement → repeat-while-statement

GRAMMAR OF A FOR-IN STATEMENT for-in-statement → for case opt_{opt} pattern in expression where-clause opt_{opt} code-block

GRAMMAR OF A WHILE STATEMENT while-statement → while condition-list code-block condition-list → condition | condition , condition-list condition → expression | availability-condition | case-condition | optional-binding-condition case-condition → case pattern initializer optional-binding-condition → let pattern initializer | var pattern initializer

GRAMMAR OF A REPEAT-WHILE STATEMENT repeat-while-statement → repeat code-block while expression

GRAMMAR OF A BRANCH STATEMENT branch-statement → if-statement branch-statement → guard-statement branch-statement → switch-statement

GRAMMAR OF AN IF STATEMENT if-statement → if condition-list code-block else-clause opt_{opt} else-clause → else code-block | else if-statement

GRAMMAR OF A GUARD STATEMENT guard-statement → guard condition-list else code-block

GRAMMAR OF A SWITCH STATEMENT switch-statement → switch expression { switch-cases opt_{opt} } switch-cases → switch-case switch-cases opt_{opt} switch-case → case-label statements switch-case → default-label statements switch-case → conditional-switch-case case-label → attributes opt_{opt} case case-item-list : case-item-list → pattern where-clause opt_{opt} | pattern where-clause opt_{opt} , case-item-list default-label → attributes opt_{opt} default : where-clause → where where-expression where-expression → expression conditional-switch-case → switch-if-directive-clause switch-elseif-directive-clauses opt_{opt} switch-else-directive-clause opt_{opt} endif-directive switch-if-directive-clause → if-directive compilation-condition switch-cases opt_{opt} switch-elseif-directive-clauses → elseif-directive-clause switch-elseif-directive-clauses opt_{opt} switch-elseif-directive-clause → elseif-directive compilation-condition switch-cases opt_{opt} switch-else-directive-clause → else-directive switch-cases opt_{opt}

GRAMMAR OF A LABELED STATEMENT labeled-statement → statement-label loop-statement labeled-statement → statement-label if-statement labeled-statement → statement-label switch-statement labeled-statement → statement-label do-statement statement-label → label-name : label-name → identifier

GRAMMAR OF A CONTROL TRANSFER STATEMENT control-transfer-statement → break-statement control-transfer-statement → continue-statement control-transfer-statement → fallthrough-statement control-transfer-statement → return-statement control-transfer-statement → throw-statement

GRAMMAR OF A BREAK STATEMENT break-statement → break label-name opt_{opt}

GRAMMAR OF A CONTINUE STATEMENT continue-statement → continue label-name opt_{opt}

GRAMMAR OF A FALLTHROUGH STATEMENT fallthrough-statement → fallthrough

GRAMMAR OF A RETURN STATEMENT return-statement → return expression opt_{opt}

GRAMMAR OF A THROW STATEMENT throw-statement → throw expression

GRAMMAR OF A DEFER STATEMENT defer-statement → defer code-block

GRAMMAR OF A DO STATEMENT do-statement → do code-block catch-clauses opt_{opt} catch-clauses → catch-clause catch-clauses opt_{opt} catch-clause → catch catch-pattern-list opt_{opt} code-block catch-pattern-list → catch-pattern | catch-pattern , catch-pattern-list catch-pattern → pattern where-clause opt_{opt}

GRAMMAR OF A COMPILER CONTROL STATEMENT compiler-control-statement → conditional-compilation-block compiler-control-statement → line-control-statement compiler-control-statement → diagnostic-statement

GRAMMAR OF A CONDITIONAL COMPILATION BLOCK conditional-compilation-block → if-directive-clause elseif-directive-clauses opt_{opt} else-directive-clause opt_{opt} endif-directive if-directive-clause → if-directive compilation-condition statements opt_{opt} elseif-directive-clauses → elseif-directive-clause elseif-directive-clauses opt_{opt} elseif-directive-clause → elseif-directive compilation-condition statements opt_{opt} else-directive-clause → else-directive statements opt_{opt} if-directive → #if elseif-directive → #elseif else-directive → #else endif-directive → #endif compilation-condition → platform-condition compilation-condition → identifier compilation-condition → boolean-literal compilation-condition → ( compilation-condition ) compilation-condition → ! compilation-condition compilation-condition → compilation-condition && compilation-condition compilation-condition → compilation-condition || compilation-condition platform-condition → os ( operating-system ) platform-condition → arch ( architecture ) platform-condition → swift ( >= swift-version ) | swift ( < swift-version ) platform-condition → compiler ( >= swift-version ) | compiler ( < swift-version ) platform-condition → canImport ( module-name ) platform-condition → targetEnvironment ( environment ) operating-system → macOS | iOS | watchOS | tvOS | Linux | Windows architecture → i386 | x86_64 | arm | arm64 swift-version → decimal-digits swift-version-continuation opt_{opt} swift-version-continuation → . decimal-digits swift-version-continuation opt_{opt} module-name → identifier environment → simulator | macCatalyst

GRAMMAR OF A LINE CONTROL STATEMENT line-control-statement → #sourceLocation ( file: file-path , line: line-number ) line-control-statement → #sourceLocation ( ) line-number → 0 보다 큰 10진수 정수 file-path → static-string-literal

GRAMMAR OF A COMPILE-TIME DIAGNOSTIC STATEMENT diagnostic-statement → #error ( diagnostic-message ) diagnostic-statement → #warning ( diagnostic-message ) diagnostic-message → static-string-literal

GRAMMAR OF AN AVAILABILITY CONDITION availability-condition → #available ( availability-arguments ) availability-arguments → availability-argument | availability-argument , availability-arguments availability-argument → platform-name platform-version availability-argument → * platform-name → iOS | iOSApplicationExtension platform-name → macOS | macOSApplicationExtension platform-name → macCatalyst | macCatalystApplicationExtension platform-name → watchOS platform-name → tvOS platform-version → decimal-digits platform-version → decimal-digits . decimal-digits platform-version → decimal-digits . decimal-digits . decimal-digits

선언 (Declarations)

GRAMMAR OF A DECLARATION declaration → import-declaration declaration → constant-declaration declaration → variable-declaration declaration → typealias-declaration declaration → function-declaration declaration → enum-declaration declaration → struct-declaration declaration → class-declaration declaration → actor-declaration declaration → protocol-declaration declaration → initializer-declaration declaration → deinitializer-declaration declaration → extension-declaration declaration → subscript-declaration declaration → operator-declaration declaration → precedence-group-declaration declarations → declaration declarations opt_{opt}

GRAMMAR OF A TOP-LEVEL DECLARATION top-level-declaration → statements opt_{opt}

GRAMMAR OF A CODE BLOCK code-block → { statements opt_{opt} }

GRAMMAR OF AN IMPORT DECLARATION import-declaration → attributes opt_{opt} import import-kind opt_{opt} import-path import-kind → typealias | struct | class | enum | protocol | let | var | func import-path → import-path-identifier | import-path-identifier . import-path import-path-identifier → identifier | operator

GRAMMAR OF A CONSTANT DECLARATION constant-declaration → attributes opt_{opt} declaration-modifiers opt_{opt} let pattern-initializer-list pattern-initializer-list → pattern-initializer | pattern-initializer , pattern-initializer-list pattern-initializer → pattern initializer opt_{opt} initializer → = expression

GRAMMAR OF A VARIABLE DECLARATION variable-declaration → variable-declaration-head pattern-initializer-list variable-declaration → variable-declaration-head variable-name type-annotation code-block variable-declaration → variable-declaration-head variable-name type-annotation getter-setter-block variable-declaration → variable-declaration-head variable-name type-annotation getter-setter-keyword-block variable-declaration → variable-declaration-head variable-name initializer willSet-didSet-block variable-declaration → variable-declaration-head variable-name type-annotation initializer opt_{opt} willSet-didSet-block variable-declaration-head → attributes opt_{opt} declaration-modifiers opt_{opt} var variable-name → identifier getter-setter-block → code-block getter-setter-block → { getter-clause setter-clause opt_{opt} } getter-setter-block → { setter-clause getter-clause } getter-clause → attributes opt_{opt} mutation-modifier opt_{opt} get code-block setter-clause → attributes opt_{opt} mutation-modifier opt_{opt} set setter-name opt_{opt} code-block setter-name → ( identifier ) getter-setter-keyword-block → { getter-keyword-clause setter-keyword-clause opt_{opt} } getter-setter-keyword-block → { setter-keyword-clause getter-keyword-clause } getter-keyword-clause → attributes opt_{opt} mutation-modifier opt_{opt} get setter-keyword-clause → attributes opt_{opt} mutation-modifier opt_{opt} set willSet-didSet-block → { willSet-clause didSet-clause opt_{opt} } willSet-didSet-block → { didSet-clause willSet-clause opt_{opt} } willSet-clause → attributes opt_{opt} willSet setter-name opt_{opt} code-block didSet-clause → attributes opt_{opt} didSet setter-name opt_{opt} code-block

GRAMMAR OF A TYPE ALIAS DECLARATION typealias-declaration → attributes opt_{opt} access-level-modifier opt_{opt} typealias typealias-name generic-parameter-clause opt_{opt} typealias-assignment typealias-name → identifier typealias-assignment → = type

GRAMMAR OF A FUNCTION DECLARATION function-declaration → function-head function-name generic-parameter-clause opt_{opt} function-signaturegeneric-where-clause opt_{opt} function-body opt_{opt} function-head → attributes opt_{opt} declaration-modifiers opt_{opt} func function-name → identifier | operator function-signature → parameter-clause throws opt_{opt} function-result opt_{opt} function-signature → parameter-clause rethrows function-result opt_{opt} function-result → -> attributes opt_{opt} type function-body → code-block parameter-clause → ( ) | ( parameter-list ) parameter-list → parameter | parameter , parameter-list parameter → external-parameter-name opt_{opt} local-parameter-name type-annotation default-argument-clause opt_{opt} parameter → external-parameter-name opt_{opt} local-parameter-name type-annotation parameter → external-parameter-name opt_{opt} local-parameter-name type-annotation ... external-parameter-name → identifier local-parameter-name → identifier default-argument-clause → = expression

GRAMMAR OF AN ENUMERATION DECLARATION enum-declaration → attributes opt_{opt} access-level-modifier opt_{opt} union-style-enum enum-declaration → attributes opt_{opt} access-level-modifier opt_{opt} raw-value-style-enum union-style-enum → indirect opt_{opt} enum enum-name generic-parameter-clause opt_{opt} type-inheritance-clause opt_{opt} generic-where-clause opt_{opt} { union-style-enum-members opt_{opt} } union-style-enum-members → union-style-enum-member union-style-enum-members opt_{opt} union-style-enum-member → declaration | union-style-enum-case-clause | compiler-control-statement union-style-enum-case-clause → attributes opt_{opt} indirect opt_{opt} case union-style-enum-case-list union-style-enum-case-list → union-style-enum-case | union-style-enum-case , union-style-enum-case-list union-style-enum-case → enum-case-name tuple-type opt_{opt} enum-name → identifier enum-case-name → identifier raw-value-style-enum → enum enum-name generic-parameter-clause opt_{opt} type-inheritance-clausegeneric-where-clause opt_{opt} { raw-value-style-enum-members } raw-value-style-enum-members → raw-value-style-enum-member raw-value-style-enum-members opt_{opt} raw-value-style-enum-member → declaration | raw-value-style-enum-case-clause | compiler-control-statement raw-value-style-enum-case-clause → attributes opt_{opt} case raw-value-style-enum-case-list raw-value-style-enum-case-list → raw-value-style-enum-case | raw-value-style-enum-case , raw-value-style-enum-case-list raw-value-style-enum-case → enum-case-name raw-value-assignment opt_{opt} raw-value-assignment → = raw-value-literal raw-value-literal → numeric-literal | static-string-literal | boolean-literal

GRAMMAR OF A STRUCTURE DECLARATION struct-declaration → attributes opt_{opt} access-level-modifier opt_{opt} struct struct-name generic-parameter-clause opt_{opt} type-inheritance-clause opt_{opt} generic-where-clause opt_{opt} struct-body struct-name → identifier struct-body → { struct-members opt_{opt} } struct-members → struct-member struct-members opt_{opt} struct-member → declaration | compiler-control-statement

GRAMMAR OF A CLASS DECLARATION class-declaration → attributes opt_{opt} access-level-modifier opt_{opt} final opt_{opt} class class-name generic-parameter-clause opt_{opt} type-inheritance-clause opt_{opt} generic-where-clause opt_{opt} class-body class-declaration → attributes opt_{opt} final access-level-modifier opt_{opt} class class-name generic-parameter-clause opt_{opt} type-inheritance-clause opt_{opt} generic-where-clause opt_{opt} class-body class-name → identifier class-body → { class-members opt_{opt} } class-members → class-member class-members opt_{opt} class-member → declaration | compiler-control-statement

GRAMMAR OF AN ACTOR DECLARATION actor-declaration → attributes opt_{opt} access-level-modifier opt_{opt} actor actor-name generic-parameter-clause opt_{opt} type-inheritance-clause opt_{opt} generic-where-clause opt_{opt} actor-body actor-name → identifier actor-body → { actor-members opt_{opt} } actor-members → actor-member actor-members opt_{opt} actor-member → declaration|compiler-control-statement

GRAMMAR OF A PROTOCOL DECLARATION protocol-declaration → attributes opt_{opt} access-level-modifier opt_{opt} protocol protocol-name type-inheritance-clause opt_{opt} generic-where-clause opt_{opt} protocol-body protocol-name → identifier protocol-body → { protocol-members opt_{opt} } protocol-members → protocol-member protocol-members opt_{opt} protocol-member → protocol-member-declaration | compiler-control-statement protocol-member-declaration → protocol-property-declaration protocol-member-declaration → protocol-method-declaration protocol-member-declaration → protocol-initializer-declaration protocol-member-declaration → protocol-subscript-declaration protocol-member-declaration → protocol-associated-type-declaration protocol-member-declaration → typealias-declaration

GRAMMAR OF A PROTOCOL PROPERTY DECLARATION protocol-property-declaration → variable-declaration-head variable-name type-annotation getter-setter-keyword-block

GRAMMAR OF A PROTOCOL METHOD DECLARATION protocol-method-declaration → function-head function-name generic-parameter-clause opt_{opt} function-signature generic-where-clause opt_{opt}

GRAMMAR OF A PROTOCOL INITIALIZER DECLARATION protocol-initializer-declaration → initializer-head generic-parameter-clause opt_{opt} parameter-clausethrows opt_{opt} generic-where-clause opt_{opt} protocol-initializer-declaration → initializer-head generic-parameter-clause opt_{opt} parameter-clauserethrows generic-where-clause opt_{opt}

GRAMMAR OF A PROTOCOL SUBSCRIPT DECLARATION protocol-subscript-declaration → subscript-head subscript-result generic-where-clause opt_{opt} getter-setter-keyword-block

GRAMMAR OF A PROTOCOL ASSOCIATED TYPE DECLARATION protocol-associated-type-declaration → attributes opt_{opt} access-level-modifier opt_{opt} associatedtypetypealias-name type-inheritance-clause opt_{opt} typealias-assignment opt_{opt} generic-where-clause opt_{opt}

GRAMMAR OF AN INITIALIZER DECLARATION initializer-declaration → initializer-head generic-parameter-clause opt_{opt} parameter-clause throws opt_{opt} generic-where-clause opt_{opt} initializer-body initializer-declaration → initializer-head generic-parameter-clause opt_{opt} parameter-clause rethrowsgeneric-where-clause opt_{opt} initializer-body initializer-head → attributes opt_{opt} declaration-modifiers opt_{opt} init initializer-head → attributes opt_{opt} declaration-modifiers opt_{opt} init ? initializer-head → attributes opt_{opt} declaration-modifiers opt_{opt} init ! initializer-body → code-block

GRAMMAR OF A DEINITIALIZER DECLARATION deinitializer-declaration → attributes opt_{opt} deinit code-block

GRAMMAR OF AN EXTENSION DECLARATION extension-declaration → attributes opt_{opt} access-level-modifier opt_{opt} extension type-identifier type-inheritance-clause opt_{opt} generic-where-clause opt_{opt} extension-body extension-body → { extension-members opt_{opt}