@@ -148,6 +148,8 @@ No other changes are permitted; the following are particularly of note:
148
148
not they have default arguments.
149
149
- An ABI-public function that throws may not become non-throwing or vice versa.
150
150
- The ``@escaping `` attribute may not be added to or removed from a parameter.
151
+ - Adding or removing a function builder from a parameter is a
152
+ `binary-compatible source-breaking change `.
151
153
152
154
153
155
Inlinable Functions
@@ -291,6 +293,11 @@ changes are permitted:
291
293
- Adding or removing ``@NSCopying `` to/from a variable.
292
294
- If the variable is get-only, or if it has a non-ABI-public setter, it may be
293
295
replaced by a ``let `` constant.
296
+ - Adding a property wrapper to a variable, or changing from one property
297
+ wrapper to another, as long as an ABI-public setter or projected value
298
+ (``$foo ``) is not removed
299
+ - Removing a property wrapper from a variable, as long as the property wrapper
300
+ didn't have a projected value (``$foo ``).
294
301
295
302
For an ABI-public module-scope constant declared with ``let ``, the following
296
303
changes are permitted:
@@ -341,6 +348,7 @@ the following changes are permitted:
341
348
- Adding a conformance to an ABI-public protocol *that was introduced in the
342
349
same release * (see below).
343
350
- Adding or removing a conformance to a non-ABI-public protocol.
351
+ - Adding ``@dynamicCallable `` to the struct.
344
352
345
353
The important most aspect of a Swift struct is its value semantics, not its
346
354
layout.
@@ -430,10 +438,11 @@ stored properties also must not have any observing accessors. In effect:
430
438
- Adding a new protocol conformance is still permitted, per the usual
431
439
restrictions.
432
440
- Removing conformances to non-ABI-public protocols is still permitted.
441
+ - Adding, changing, or removing property wrappers is not permitted.
433
442
434
443
Additionally, if the type of any stored instance property includes a struct or
435
- enum, that struct or enum must be ABI-public. This includes generic parameters
436
- and members of tuples.
444
+ enum, that struct or enum must be ABI-public. This includes generic parameters,
445
+ members of tuples, and property wrappers for stored instance properties .
437
446
438
447
.. note ::
439
448
@@ -488,6 +497,7 @@ accommodate new values. More specifically, the following changes are permitted:
488
497
- Removing any non-ABI-public members.
489
498
- Adding a new protocol conformance, with the same restrictions as for structs.
490
499
- Removing conformances to non-ABI-public protocols.
500
+ - Adding ``@dynamicCallable `` to the enum.
491
501
492
502
.. note ::
493
503
@@ -599,6 +609,7 @@ support all of the following changes:
599
609
- Adding a new protocol conformance (subject to the same restrictions as for
600
610
structs).
601
611
- Removing conformances to non-ABI-public protocols.
612
+ - Adding ``@dynamicCallable `` to the class.
602
613
603
614
Omitted from this list is the free addition of new members. Here classes are a
604
615
little more restrictive than structs; they only allow the following changes:
@@ -721,6 +732,14 @@ Variable properties (those declared with ``var``) allow the following changes:
721
732
- Adding or removing ``weak `` from a variable with ``Optional `` type.
722
733
- Adding or removing ``unowned `` from a variable.
723
734
- Adding or removing ``@NSCopying `` from a variable.
735
+ - Adding a property wrapper to a non-``open `` variable, or changing from one
736
+ property wrapper to another, as long as an ABI-public setter or projected
737
+ value (``$foo ``) is not removed.
738
+ - Adding a property wrapper to an ``open `` variable, or changing from one
739
+ property wrapper to another, as long as an ABI-public setter or projected
740
+ value (``$foo ``) is not added or removed.
741
+ - Removing a property wrapper from a variable, as long as the property wrapper
742
+ didn't have a projected value (``$foo ``).
724
743
725
744
Adding a public setter to an ``open `` property is a
726
745
`binary-compatible source-breaking change `; any existing overrides will not
0 commit comments