After examining our immutable example implementation, we are not able to say that it covers all the functionalities of the imperative approach. For instance, it does not provide us with a way to change the producer of a product. After all, we cannot change it.
Whenever we need to change any property of the product, we need to go through the following process:
let mexBananas = FunctionalProduct(name: bananas.name,
price: bananas.price,
quantity: bananas.quantity,
producer: Producer(name: "XYZ",
address: "New
Mexico, Mexico"))
This solution is verbose and does not look nice. Let's examine how we can improve this process.