https://betterprogramming.pub/how-to-implement-propertywrapper-wrappedvalue-and-projectedvalue-in-swift-c7aa89b0979e