We need to decide how we will model our daily event. The key to this decision is whether we want our event to have reference semantics or value semantics. We discussed the differences between the two in Chapter 1, Swift Building Blocks, but let's re-examine the differences.
Value types are simple data structures that you can think of as just bundles of data. Swift makes these types more useful by allowing them to have methods, but any change or mutation of the underlying data results in a whole new bundle of data. In contrast, reference types are more complex data structures that have an identity outside of their component properties. Therefore, a change in the component properties will be available via any references to the object.
A value type's simple composition has the advantage of being very cheap on resources to create and maintain. However, this simplicity comes at the expense of dynamic dispatch, which enables sub-classing...