<div dir="ltr">Is there a way to restrict the associated values of an enum? For example, suppose I have this type:<div><br></div><div><div><font face="monospace, monospace">enum Angle {</font></div><div><font face="monospace, monospace">    case radians(Double)</font></div><div><font face="monospace, monospace">    case degrees(Double)</font></div><div><font face="monospace, monospace">}</font></div></div><div><br></div><div>I want to ensure that the radians values is always in [0, 2π) and the degrees values is always in [0, 360). Ideally I would like to write an initializer which is called when the user writes eg. “let x: Angle = .degrees(-45)” and contains the logic to wrap the provided value into the allowed range (in this case by adding a multiple of 360).</div><div><br></div><div>I don’t see a way to do it. Is this possible?<br></div><div><br></div><div>The closest I’ve found is to create auxiliary types such as</div><div><br></div><div><font face="monospace, monospace">struct Degree { … }</font></div><div><font face="monospace, monospace">struct Radian { … }</font><br></div><div><br></div><div>and give them appropriate initializers, then use them for the associated values. However that is undesirable because it adds an extra level of depth to get at the actual numeric values.</div><div><br></div><div>Is there a better way?</div><div><br></div><div>Nevin</div></div>