Struct Semantics in Swift
Instead, we can change our
mutableData
accessor to prevent copying when there are no other references to thedata
variable. 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 theisUniquelyReferencedNonObjC
function. This is the reason why we needBox
: it only works on Swift classes.NSMutableData
is 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.