xref: /llvm-project/clang/docs/APINotes.rst (revision f96ea8983b8edc941107c7df2e4f08b44a1663d0)
185d50640SSaleem Abdulrasool================================================
285d50640SSaleem AbdulrasoolAPI Notes: Annotations Without Modifying Headers
385d50640SSaleem Abdulrasool================================================
485d50640SSaleem Abdulrasool
585d50640SSaleem Abdulrasool**The Problem:** You have headers you want to use, but you also want to add
685d50640SSaleem Abdulrasoolextra information to the API. You don't want to put that information in the
785d50640SSaleem Abdulrasoolheaders themselves --- perhaps because you want to keep them clean for other
885d50640SSaleem Abdulrasoolclients, or perhaps because they're from some open source project and you don't
985d50640SSaleem Abdulrasoolwant to modify them at all.
1085d50640SSaleem Abdulrasool
1185d50640SSaleem Abdulrasool**Incomplete solution:** Redeclare all the interesting parts of the API in your
1285d50640SSaleem Abdulrasoolown header and add the attributes you want. Unfortunately, this:
1385d50640SSaleem Abdulrasool
1485d50640SSaleem Abdulrasool* doesn't work with attributes that must be present on a definition
1585d50640SSaleem Abdulrasool* doesn't allow changing the definition in other ways
1685d50640SSaleem Abdulrasool* requires your header to be included in any client code to take effect
1785d50640SSaleem Abdulrasool
1885d50640SSaleem Abdulrasool**Better solution:** Provide a "sidecar" file with the information you want to
1985d50640SSaleem Abdulrasooladd, and have that automatically get picked up by the module-building logic in
2085d50640SSaleem Abdulrasoolthe compiler.
2185d50640SSaleem Abdulrasool
2285d50640SSaleem AbdulrasoolThat's API notes.
2385d50640SSaleem Abdulrasool
2485d50640SSaleem AbdulrasoolAPI notes use a YAML-based file format. YAML is a format best explained by
25e43a85a3SYuki Okushiexample, so here is a `small example
26e43a85a3SYuki Okushi<https://github.com/llvm/llvm-project/blob/main/clang/test/APINotes/Inputs/Frameworks/SomeKit.framework/Headers/SomeKit.apinotes>`_
27e43a85a3SYuki Okushifrom the compiler test suite of API
2885d50640SSaleem Abdulrasoolnotes for a hypothetical "SomeKit" framework.
2985d50640SSaleem Abdulrasool
3085d50640SSaleem Abdulrasool
3185d50640SSaleem AbdulrasoolUsage
3285d50640SSaleem Abdulrasool=====
3385d50640SSaleem Abdulrasool
3485d50640SSaleem AbdulrasoolAPI notes files are found relative to the module map that defines a module,
3585d50640SSaleem Abdulrasoolunder the name "SomeKit.apinotes" for a module named "SomeKit". Additionally, a
3685d50640SSaleem Abdulrasoolfile named "SomeKit_private.apinotes" will also be picked up to go with a
3785d50640SSaleem Abdulrasoolprivate module map. For bare modules these two files will be in the same
3885d50640SSaleem Abdulrasooldirectory as the corresponding module map; for framework modules, they should
3985d50640SSaleem Abdulrasoolbe placed in the Headers and PrivateHeaders directories, respectively. The
4085d50640SSaleem Abdulrasoolmodule map for a private top-level framework module should be placed in the
4185d50640SSaleem AbdulrasoolPrivateHeaders directory as well, though it does not need an additional
4285d50640SSaleem Abdulrasool"_private" suffix on its name.
4385d50640SSaleem Abdulrasool
4485d50640SSaleem AbdulrasoolClang will search for API notes files next to module maps only when passed the
4585d50640SSaleem Abdulrasool``-fapi-notes-modules`` option.
4685d50640SSaleem Abdulrasool
4785d50640SSaleem Abdulrasool
4885d50640SSaleem AbdulrasoolLimitations
4985d50640SSaleem Abdulrasool===========
5085d50640SSaleem Abdulrasool
5185d50640SSaleem Abdulrasool- Since they're identified by module name, API notes cannot be used to modify
5285d50640SSaleem Abdulrasool  arbitrary textual headers.
5385d50640SSaleem Abdulrasool
5485d50640SSaleem Abdulrasool
5585d50640SSaleem Abdulrasool"Versioned" API Notes
5685d50640SSaleem Abdulrasool=====================
5785d50640SSaleem Abdulrasool
5885d50640SSaleem AbdulrasoolMany API notes affect how a C API is imported into Swift. In order to change
5985d50640SSaleem Abdulrasoolthat behavior while still remaining backwards-compatible, API notes can be
6085d50640SSaleem Abdulrasoolselectively applied based on the Swift compatibility version provided to the
6185d50640SSaleem Abdulrasoolcompiler (e.g. ``-fapi-notes-swift-version=5``). The rule is that an
6285d50640SSaleem Abdulrasoolexplicitly-versioned API note applies to that version *and all earlier
6385d50640SSaleem Abdulrasoolversions,* and any applicable explicitly-versioned API note takes precedence
6485d50640SSaleem Abdulrasoolover an unversioned API note.
6585d50640SSaleem Abdulrasool
6685d50640SSaleem Abdulrasool
6785d50640SSaleem AbdulrasoolReference
6885d50640SSaleem Abdulrasool=========
6985d50640SSaleem Abdulrasool
7085d50640SSaleem AbdulrasoolAn API notes file contains a YAML dictionary with the following top-level
7185d50640SSaleem Abdulrasoolentries:
7285d50640SSaleem Abdulrasool
7385d50640SSaleem Abdulrasool:Name:
7485d50640SSaleem Abdulrasool
7585d50640SSaleem Abdulrasool  The name of the module (the framework name, for frameworks). Note that this
7685d50640SSaleem Abdulrasool  is always the name of a top-level module, even within a private API notes
7785d50640SSaleem Abdulrasool  file.
7885d50640SSaleem Abdulrasool
7985d50640SSaleem Abdulrasool  ::
8085d50640SSaleem Abdulrasool
8185d50640SSaleem Abdulrasool    Name: MyFramework
8285d50640SSaleem Abdulrasool
83058486c9SEgor Zhdan:Classes, Protocols, Tags, Typedefs, Globals, Enumerators, Functions, Namespaces:
8485d50640SSaleem Abdulrasool
8585d50640SSaleem Abdulrasool  Arrays of top-level declarations. Each entry in the array must have a
86058486c9SEgor Zhdan  'Name' key with its Objective-C or C++ name. "Tags" refers to structs,
87058486c9SEgor Zhdan  C++ classes, enums, and unions; "Classes" refers to Objective-C classes;
88058486c9SEgor Zhdan  "Enumerators" refers to enum cases.
8985d50640SSaleem Abdulrasool
9085d50640SSaleem Abdulrasool  ::
9185d50640SSaleem Abdulrasool
9285d50640SSaleem Abdulrasool    Classes:
9385d50640SSaleem Abdulrasool    - Name: MyController
9485d50640SSaleem Abdulrasool9585d50640SSaleem Abdulrasool    - Name: MyView
9685d50640SSaleem Abdulrasool9785d50640SSaleem Abdulrasool
9885d50640SSaleem Abdulrasool:SwiftVersions:
9985d50640SSaleem Abdulrasool
10085d50640SSaleem Abdulrasool  Contains explicit information for backwards compatibility. Each entry in
10185d50640SSaleem Abdulrasool  the array contains a 'Version' key, which should be set to '4' for
10285d50640SSaleem Abdulrasool  annotations that only apply to Swift 4 mode and earlier. The other entries
10385d50640SSaleem Abdulrasool  in this dictionary are the same declaration entries as at the top level:
10485d50640SSaleem Abdulrasool  Classes, Protocols, Tags, Typedefs, Globals, Enumerators, and Functions.
10585d50640SSaleem Abdulrasool
10685d50640SSaleem Abdulrasool  ::
10785d50640SSaleem Abdulrasool
10885d50640SSaleem Abdulrasool    SwiftVersions:
10985d50640SSaleem Abdulrasool    - Version: 4
11085d50640SSaleem Abdulrasool      Classes: …
11185d50640SSaleem Abdulrasool      Protocols: …
11285d50640SSaleem Abdulrasool
11385d50640SSaleem AbdulrasoolEach entry under 'Classes' and 'Protocols' can contain "Methods" and
11485d50640SSaleem Abdulrasool"Properties" arrays, in addition to the attributes described below:
11585d50640SSaleem Abdulrasool
11685d50640SSaleem Abdulrasool:Methods:
11785d50640SSaleem Abdulrasool
11885d50640SSaleem Abdulrasool  Identified by 'Selector' and 'MethodKind'; the MethodKind is either
11985d50640SSaleem Abdulrasool  "Instance" or "Class".
12085d50640SSaleem Abdulrasool
12185d50640SSaleem Abdulrasool  ::
12285d50640SSaleem Abdulrasool
12385d50640SSaleem Abdulrasool    Classes:
12485d50640SSaleem Abdulrasool    - Name: UIViewController
12585d50640SSaleem Abdulrasool      Methods:
12685d50640SSaleem Abdulrasool      - Selector: "presentViewController:animated:"
12785d50640SSaleem Abdulrasool        MethodKind: Instance
12885d50640SSaleem Abdulrasool12985d50640SSaleem Abdulrasool
13085d50640SSaleem Abdulrasool:Properties:
13185d50640SSaleem Abdulrasool
13285d50640SSaleem Abdulrasool  Identified by 'Name' and 'PropertyKind'; the PropertyKind is also either
13385d50640SSaleem Abdulrasool  "Instance" or "Class".
13485d50640SSaleem Abdulrasool
13585d50640SSaleem Abdulrasool  ::
13685d50640SSaleem Abdulrasool
13785d50640SSaleem Abdulrasool    Classes:
13885d50640SSaleem Abdulrasool    - Name: UIView
13985d50640SSaleem Abdulrasool      Properties:
14085d50640SSaleem Abdulrasool      - Name: subviews
14185d50640SSaleem Abdulrasool        PropertyKind: Instance
14285d50640SSaleem Abdulrasool14385d50640SSaleem Abdulrasool
14485d50640SSaleem AbdulrasoolEach declaration supports the following annotations (if relevant to that
14585d50640SSaleem Abdulrasooldeclaration kind), all of which are optional:
14685d50640SSaleem Abdulrasool
14785d50640SSaleem Abdulrasool:SwiftName:
14885d50640SSaleem Abdulrasool
14985d50640SSaleem Abdulrasool  Equivalent to ``NS_SWIFT_NAME``. For a method, must include the full Swift name
15085d50640SSaleem Abdulrasool  with all arguments. Use "_" to omit an argument label.
15185d50640SSaleem Abdulrasool
15285d50640SSaleem Abdulrasool  ::
15385d50640SSaleem Abdulrasool
15485d50640SSaleem Abdulrasool    - Selector: "presentViewController:animated:"
15585d50640SSaleem Abdulrasool      MethodKind: Instance
15685d50640SSaleem Abdulrasool      SwiftName: "present(_:animated:)"
15785d50640SSaleem Abdulrasool
15885d50640SSaleem Abdulrasool    - Class: NSBundle
15985d50640SSaleem Abdulrasool      SwiftName: Bundle
16085d50640SSaleem Abdulrasool
161058486c9SEgor Zhdan:SwiftImportAs:
162058486c9SEgor Zhdan
163058486c9SEgor Zhdan  For a class, possible values are ``owned`` (equivalent to
164058486c9SEgor Zhdan  ``SWIFT_SELF_CONTAINED``) or ``reference`` (equivalent to
165058486c9SEgor Zhdan  ``SWIFT_SHARED_REFERENCE``, also requires specifying ``SwiftReleaseOp`` and
166058486c9SEgor Zhdan  ``SwiftRetainOp``).
167058486c9SEgor Zhdan
168058486c9SEgor Zhdan  For a method, possible values are ``unsafe`` (equivalent
169058486c9SEgor Zhdan  to ``SWIFT_RETURNS_INDEPENDENT_VALUE``) or ``computed_property`` (equivalent to
170058486c9SEgor Zhdan  ``SWIFT_COMPUTED_PROPERTY``).
171058486c9SEgor Zhdan
172058486c9SEgor Zhdan  ::
173058486c9SEgor Zhdan
174058486c9SEgor Zhdan    Tags:
175*f96ea898SEgor Zhdan    - Name: OwnedStorage
176*f96ea898SEgor Zhdan      SwiftImportAs: owned
177*f96ea898SEgor Zhdan
178*f96ea898SEgor Zhdan:SwiftRetainOp, SwiftReleaseOp:
179*f96ea898SEgor Zhdan
180*f96ea898SEgor Zhdan  Controls the lifetime operations of a class which uses custom reference
181*f96ea898SEgor Zhdan  counting. The class must be annotated as a reference type using
182*f96ea898SEgor Zhdan  ``SwiftImportAs: reference``. The values are either names of global functions,
183*f96ea898SEgor Zhdan  each taking a single parameter of a pointer type, or ``immortal`` for a type
184*f96ea898SEgor Zhdan  that is considered alive for the duration of the program.
185*f96ea898SEgor Zhdan
186*f96ea898SEgor Zhdan  ::
187*f96ea898SEgor Zhdan
188*f96ea898SEgor Zhdan    Tags:
189058486c9SEgor Zhdan    - Name: RefCountedStorage
190058486c9SEgor Zhdan      SwiftImportAs: reference
191058486c9SEgor Zhdan      SwiftReleaseOp: RCRelease
192058486c9SEgor Zhdan      SwiftRetainOp: RCRetain
193*f96ea898SEgor Zhdan    - Name: ImmortalSingleton
194*f96ea898SEgor Zhdan      SwiftImportAs: reference
195*f96ea898SEgor Zhdan      SwiftReleaseOp: immortal
196*f96ea898SEgor Zhdan      SwiftRetainOp: immortal
197058486c9SEgor Zhdan
198058486c9SEgor Zhdan:SwiftCopyable:
199058486c9SEgor Zhdan
200058486c9SEgor Zhdan  Allows annotating a C++ class as non-copyable in Swift. Equivalent to
201058486c9SEgor Zhdan  ``SWIFT_NONCOPYABLE``, or to an explicit conformance ``: ~Copyable``.
202058486c9SEgor Zhdan
203058486c9SEgor Zhdan  ::
204058486c9SEgor Zhdan
205058486c9SEgor Zhdan    Tags:
206058486c9SEgor Zhdan    - Name: tzdb
207058486c9SEgor Zhdan      SwiftCopyable: false
208058486c9SEgor Zhdan
209dc8c217dSEgor Zhdan:SwiftConformsTo:
210dc8c217dSEgor Zhdan
211dc8c217dSEgor Zhdan  Allows annotating a C++ class as conforming to a Swift protocol. Equivalent
212dc8c217dSEgor Zhdan  to ``SWIFT_CONFORMS_TO_PROTOCOL``. The value is a module-qualified name of a
213dc8c217dSEgor Zhdan  Swift protocol.
214dc8c217dSEgor Zhdan
215dc8c217dSEgor Zhdan  ::
216dc8c217dSEgor Zhdan
217dc8c217dSEgor Zhdan    Tags:
218dc8c217dSEgor Zhdan    - Name: vector
219dc8c217dSEgor Zhdan      SwiftConformsTo: Cxx.CxxSequence
220dc8c217dSEgor Zhdan
22185d50640SSaleem Abdulrasool:Availability, AvailabilityMsg:
22285d50640SSaleem Abdulrasool
22385d50640SSaleem Abdulrasool  A value of "nonswift" is equivalent to ``NS_SWIFT_UNAVAILABLE``. A value of
22485d50640SSaleem Abdulrasool  "available" can be used in the "SwiftVersions" section to undo the effect of
22585d50640SSaleem Abdulrasool  "nonswift".
22685d50640SSaleem Abdulrasool
22785d50640SSaleem Abdulrasool  ::
22885d50640SSaleem Abdulrasool
22985d50640SSaleem Abdulrasool    - Selector: "dealloc"
23085d50640SSaleem Abdulrasool      MethodKind: Instance
23185d50640SSaleem Abdulrasool      Availability: nonswift
23285d50640SSaleem Abdulrasool      AvailabilityMsg: "prefer 'deinit'"
23385d50640SSaleem Abdulrasool
23485d50640SSaleem Abdulrasool:SwiftPrivate:
23585d50640SSaleem Abdulrasool
23685d50640SSaleem Abdulrasool  Equivalent to NS_REFINED_FOR_SWIFT.
23785d50640SSaleem Abdulrasool
23885d50640SSaleem Abdulrasool  ::
23985d50640SSaleem Abdulrasool
24085d50640SSaleem Abdulrasool    - Name: CGColorEqualToColor
24185d50640SSaleem Abdulrasool      SwiftPrivate: true
24285d50640SSaleem Abdulrasool
24385d50640SSaleem Abdulrasool:Nullability:
24485d50640SSaleem Abdulrasool
24585d50640SSaleem Abdulrasool  Used for properties and globals. There are four options, identified by their
24685d50640SSaleem Abdulrasool  initials:
24785d50640SSaleem Abdulrasool
24885d50640SSaleem Abdulrasool  - ``Nonnull`` or ``N`` (corresponding to ``_Nonnull``)
24985d50640SSaleem Abdulrasool  - ``Optional`` or ``O`` (corresponding to ``_Nullable``)
25085d50640SSaleem Abdulrasool  - ``Unspecified`` or ``U`` (corresponding to ``_Null_unspecified``)
25185d50640SSaleem Abdulrasool  - ``Scalar`` or ``S`` (deprecated)
25285d50640SSaleem Abdulrasool
25385d50640SSaleem Abdulrasool  Note that 'Nullability' is overridden by 'Type', even in a "SwiftVersions"
25485d50640SSaleem Abdulrasool  section.
25585d50640SSaleem Abdulrasool
25685d50640SSaleem Abdulrasool  .. note::
25785d50640SSaleem Abdulrasool
25885d50640SSaleem Abdulrasool    'Nullability' can also be used to describe the argument types of methods
25985d50640SSaleem Abdulrasool    and functions, but this usage is deprecated in favor of 'Parameters' (see
26085d50640SSaleem Abdulrasool    below).
26185d50640SSaleem Abdulrasool
26285d50640SSaleem Abdulrasool  ::
26385d50640SSaleem Abdulrasool
26485d50640SSaleem Abdulrasool    - Name: dataSource
26585d50640SSaleem Abdulrasool      Nullability: O
26685d50640SSaleem Abdulrasool
26785d50640SSaleem Abdulrasool:NullabilityOfRet:
26885d50640SSaleem Abdulrasool
26985d50640SSaleem Abdulrasool  Used for methods and functions. Describes the nullability of the return type.
27085d50640SSaleem Abdulrasool
27185d50640SSaleem Abdulrasool  Note that 'NullabilityOfRet' is overridden by 'ResultType', even in a
27285d50640SSaleem Abdulrasool  "SwiftVersions" section.
27385d50640SSaleem Abdulrasool
27485d50640SSaleem Abdulrasool  .. warning::
27585d50640SSaleem Abdulrasool
27685d50640SSaleem Abdulrasool    Due to a compiler bug, 'NullabilityOfRet' may change nullability of the
27785d50640SSaleem Abdulrasool    parameters as well (rdar://30544062). Avoid using it and instead use
27885d50640SSaleem Abdulrasool    'ResultType' and specify the return type along with a nullability
27985d50640SSaleem Abdulrasool    annotation (see documentation for 'ResultType').
28085d50640SSaleem Abdulrasool
28185d50640SSaleem Abdulrasool  ::
28285d50640SSaleem Abdulrasool
28385d50640SSaleem Abdulrasool    - Selector: superclass
28485d50640SSaleem Abdulrasool      MethodKind: Class
28585d50640SSaleem Abdulrasool      NullabilityOfRet: O
28685d50640SSaleem Abdulrasool
28785d50640SSaleem Abdulrasool:Type:
28885d50640SSaleem Abdulrasool
28985d50640SSaleem Abdulrasool  Used for properties and globals. This completely overrides the type of the
29085d50640SSaleem Abdulrasool  declaration; it should ideally only be used for Swift backwards
29185d50640SSaleem Abdulrasool  compatibility, when existing type information has been made more precise in a
29285d50640SSaleem Abdulrasool  header. Prefer 'Nullability' and other annotations when possible.
29385d50640SSaleem Abdulrasool
29485d50640SSaleem Abdulrasool  We parse the specified type as if it appeared at the location of the
29585d50640SSaleem Abdulrasool  declaration whose type is being modified.  Macros are not available and
29685d50640SSaleem Abdulrasool  nullability must be applied explicitly (even in an ``NS_ASSUME_NONNULL_BEGIN``
29785d50640SSaleem Abdulrasool  section).
29885d50640SSaleem Abdulrasool
29985d50640SSaleem Abdulrasool  ::
30085d50640SSaleem Abdulrasool
30185d50640SSaleem Abdulrasool    - Name: delegate
30285d50640SSaleem Abdulrasool      PropertyKind: Instance
30385d50640SSaleem Abdulrasool      Type: "id"
30485d50640SSaleem Abdulrasool
30585d50640SSaleem Abdulrasool:ResultType:
30685d50640SSaleem Abdulrasool
30785d50640SSaleem Abdulrasool  Used for methods and functions. This completely overrides the return type; it
30885d50640SSaleem Abdulrasool  should ideally only be used for Swift backwards compatibility, when existing
30985d50640SSaleem Abdulrasool  type information has been made more precise in a header.
31085d50640SSaleem Abdulrasool
31185d50640SSaleem Abdulrasool  We parse the specified type as if it appeared at the location of the
31285d50640SSaleem Abdulrasool  declaration whose type is being modified.  Macros are not available and
31385d50640SSaleem Abdulrasool  nullability must be applied explicitly (even in an ``NS_ASSUME_NONNULL_BEGIN``
31485d50640SSaleem Abdulrasool  section).
31585d50640SSaleem Abdulrasool
31685d50640SSaleem Abdulrasool  ::
31785d50640SSaleem Abdulrasool
31885d50640SSaleem Abdulrasool    - Selector: "subviews"
31985d50640SSaleem Abdulrasool      MethodKind: Instance
32085d50640SSaleem Abdulrasool      ResultType: "NSArray * _Nonnull"
32185d50640SSaleem Abdulrasool
32285d50640SSaleem Abdulrasool:SwiftImportAsAccessors:
32385d50640SSaleem Abdulrasool
32485d50640SSaleem Abdulrasool  Used for properties. If true, the property will be exposed in Swift as its
32585d50640SSaleem Abdulrasool  accessor methods, rather than as a computed property using ``var``.
32685d50640SSaleem Abdulrasool
32785d50640SSaleem Abdulrasool  ::
32885d50640SSaleem Abdulrasool
32985d50640SSaleem Abdulrasool    - Name: currentContext
33085d50640SSaleem Abdulrasool      PropertyKind: Class
33185d50640SSaleem Abdulrasool      SwiftImportAsAccessors: true
33285d50640SSaleem Abdulrasool
33385d50640SSaleem Abdulrasool:NSErrorDomain:
33485d50640SSaleem Abdulrasool
33585d50640SSaleem Abdulrasool  Used for ``NSError`` code enums. The value is the name of the associated
33685d50640SSaleem Abdulrasool  domain ``NSString`` constant; an empty string (``""``) means the enum is a
33785d50640SSaleem Abdulrasool  normal enum rather than an error code.
33885d50640SSaleem Abdulrasool
33985d50640SSaleem Abdulrasool  ::
34085d50640SSaleem Abdulrasool
34185d50640SSaleem Abdulrasool    - Name: MKErrorCode
34285d50640SSaleem Abdulrasool      NSErrorDomain: MKErrorDomain
34385d50640SSaleem Abdulrasool
34485d50640SSaleem Abdulrasool:SwiftWrapper:
34585d50640SSaleem Abdulrasool
34685d50640SSaleem Abdulrasool  Controls ``NS_STRING_ENUM`` and ``NS_EXTENSIBLE_STRING_ENUM``. There are three
34785d50640SSaleem Abdulrasool  options:
34885d50640SSaleem Abdulrasool
34985d50640SSaleem Abdulrasool  - "struct" (extensible)
35085d50640SSaleem Abdulrasool  - "enum"
35185d50640SSaleem Abdulrasool  - "none"
35285d50640SSaleem Abdulrasool
35385d50640SSaleem Abdulrasool  Note that even an "enum" wrapper is still presented as a struct in Swift;
35485d50640SSaleem Abdulrasool  it's just a "more enum-like" struct.
35585d50640SSaleem Abdulrasool
35685d50640SSaleem Abdulrasool  ::
35785d50640SSaleem Abdulrasool
35885d50640SSaleem Abdulrasool    - Name: AVMediaType
35985d50640SSaleem Abdulrasool      SwiftWrapper: none
36085d50640SSaleem Abdulrasool
36185d50640SSaleem Abdulrasool:EnumKind:
36285d50640SSaleem Abdulrasool
36385d50640SSaleem Abdulrasool  Has the same effect as ``NS_ENUM`` and ``NS_OPTIONS``. There are four options:
36485d50640SSaleem Abdulrasool
36585d50640SSaleem Abdulrasool  - "NSEnum" / "CFEnum"
36685d50640SSaleem Abdulrasool  - "NSClosedEnum" / "CFClosedEnum"
36785d50640SSaleem Abdulrasool  - "NSOptions" / "CFOptions"
36885d50640SSaleem Abdulrasool  - "none"
36985d50640SSaleem Abdulrasool
37085d50640SSaleem Abdulrasool  ::
37185d50640SSaleem Abdulrasool
37285d50640SSaleem Abdulrasool    - Name: GKPhotoSize
37385d50640SSaleem Abdulrasool      EnumKind: none
37485d50640SSaleem Abdulrasool
37585d50640SSaleem Abdulrasool:Parameters:
37685d50640SSaleem Abdulrasool
37785d50640SSaleem Abdulrasool  Used for methods and functions. Parameters are identified by a 0-based
37885d50640SSaleem Abdulrasool  'Position' and support the 'Nullability', 'NoEscape', and 'Type' keys.
37985d50640SSaleem Abdulrasool
38085d50640SSaleem Abdulrasool  .. note::
38185d50640SSaleem Abdulrasool
38285d50640SSaleem Abdulrasool    Using 'Parameters' within a parameter entry to describe the parameters of a
38385d50640SSaleem Abdulrasool    block is not implemented. Use 'Type' on the entire parameter instead.
38485d50640SSaleem Abdulrasool
38585d50640SSaleem Abdulrasool  ::
38685d50640SSaleem Abdulrasool
38785d50640SSaleem Abdulrasool    - Selector: "isEqual:"
38885d50640SSaleem Abdulrasool      MethodKind: Instance
38985d50640SSaleem Abdulrasool      Parameters:
39085d50640SSaleem Abdulrasool      - Position: 0
39185d50640SSaleem Abdulrasool        Nullability: O
39285d50640SSaleem Abdulrasool
39385d50640SSaleem Abdulrasool:NoEscape:
39485d50640SSaleem Abdulrasool
39585d50640SSaleem Abdulrasool  Used only for block parameters. Equivalent to ``NS_NOESCAPE``.
39685d50640SSaleem Abdulrasool
39785d50640SSaleem Abdulrasool  ::
39885d50640SSaleem Abdulrasool
39985d50640SSaleem Abdulrasool    - Name: dispatch_sync
40085d50640SSaleem Abdulrasool      Parameters:
40185d50640SSaleem Abdulrasool      - Position: 0
40285d50640SSaleem Abdulrasool        NoEscape: true
40385d50640SSaleem Abdulrasool
40485d50640SSaleem Abdulrasool:SwiftBridge:
40585d50640SSaleem Abdulrasool
40685d50640SSaleem Abdulrasool  Used for Objective-C class types bridged to Swift value types. An empty
40785d50640SSaleem Abdulrasool  string ("") means a type is not bridged. Not supported outside of Apple
40885d50640SSaleem Abdulrasool  frameworks (the Swift side of it requires conforming to implementation-detail
40985d50640SSaleem Abdulrasool  protocols that are subject to change).
41085d50640SSaleem Abdulrasool
41185d50640SSaleem Abdulrasool  ::
41285d50640SSaleem Abdulrasool
41385d50640SSaleem Abdulrasool    - Name: NSIndexSet
41485d50640SSaleem Abdulrasool      SwiftBridge: IndexSet
41585d50640SSaleem Abdulrasool
41685d50640SSaleem Abdulrasool:DesignatedInit:
41785d50640SSaleem Abdulrasool
41885d50640SSaleem Abdulrasool  Used for init methods. Equivalent to ``NS_DESIGNATED_INITIALIZER``.
41985d50640SSaleem Abdulrasool
42085d50640SSaleem Abdulrasool  ::
42185d50640SSaleem Abdulrasool
42285d50640SSaleem Abdulrasool    - Selector: "initWithFrame:"
42385d50640SSaleem Abdulrasool      MethodKind: Instance
42485d50640SSaleem Abdulrasool      DesignatedInit: true
425