Struct Semantics in Swift
Instead, we can change our
mutableDataaccessor to prevent copying when there are no other references to thedatavariable. To do this, we need to check if the data is uniquely referenced. In other words, we only make a copy of the data if the data is shared. We can do this using theisUniquelyReferencedNonObjCfunction. This is the reason why we needBox: it only works on Swift classes.NSMutableDatais an Objective-C class, and then the function doesn't work.[…]
Now we have full copy semantics, and efficient behavior: only when a copy is really necessary, it is made. This way, we never have to remember to write
data.copy()ourselves, we implemented it correctly once and can then forget about it.