<div dir="ltr"><div><div>The Ray Wenderlich style guide contains *some* useful insights, but you should not take it as a “swift best practices” guide, or even a good code style guide for your own projects. At the risk of sounding blunt, the RW style guide is optimized for blog posts and cheap tutorials, not a cohesive Swift code base you have to maintain over time. In addition that website is heavily iOS-developer oriented, and the iOS platform forces you to interact with a lot of Objective C frameworks which are more reference-oriented than native Swift code should be.<br><br></div>Enum scoping is when you want to group free floating functions into a common namespace to avoid polluting the global scope. For example one of the libraries I maintain has a collection of internal math functions which are handy to have around.<br><br><span style="font-family:monospace,monospace">enum Math<br>{<br>    typealias IntV2    = (a:Int, b:Int)<br>    typealias IntV3    = (a:Int, b:Int, c:Int)<br>    typealias DoubleV2 = (x:Double, y:Double)<br>    typealias DoubleV3 = (x:Double, y:Double, z:Double)<br><br>    @inline(__always)<br>    private static<br>    func fraction(_ x:Double) -&gt; (Int, Double)<br>    {<br>        let integer:Int = x &gt; 0 ? Int(x) : Int(x) - 1<br>        return (integer, x - Double(integer))<br>    }<br><br>    @inline(__always)<br>    static<br>    func fraction(_ v:DoubleV2) -&gt; (IntV2, DoubleV2)<br>    {<br>        let (i1, f1):(Int, Double) = Math.fraction(v.0),<br>            (i2, f2):(Int, Double) = Math.fraction(v.1)<br>        return ((i1, i2), (f1, f2))<br>    }<br><br>    @inline(__always)<br>    static<br>    func fraction(_ v:DoubleV3) -&gt; (IntV3, DoubleV3)<br>    {<br>        let (i1, f1):(Int, Double) = Math.fraction(v.0),<br>            (i2, f2):(Int, Double) = Math.fraction(v.1),<br>            (i3, f3):(Int, Double) = Math.fraction(v.2)<br>        return ((i1, i2, i3), (f1, f2, f3))<br>    }<br><br>    @inline(__always)<br>    static<br>    func add(_ v1:IntV2, _ v2:IntV2) -&gt; IntV2<br>    {<br>        return (v1.a + v2.a, v1.b + v2.b)<br>    }<br><br>    ...<br>}</span><br><br></div>Some, but not all projects will end up with a `<span style="font-family:monospace,monospace">Constants</span>`, enum to store global constants too. Beyond that, you shouldn’t be Enum scoping a lot, it usually isn’t hard to find a real type where some method or constant belongs. That being said, you can find a few examples of this pattern in the Swift standard library: `<span style="font-family:monospace,monospace">Unicode</span>`, `<span style="font-family:monospace,monospace">CommandLine</span>` and `<span style="font-family:monospace,monospace">MemoryLayout</span>` come to mind.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 30, 2017 at 12:12 AM, Vitor Navarro via swift-users <span dir="ltr">&lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Alex,<div><br></div><div>Thank you for the reply, actually Taylor gave me a great answer which solved my question, that was &quot;struct or classes and when should we apply each&quot;.</div><div><br></div><div>Regarding the reference I found this <a href="https://github.com/raywenderlich/swift-style-guide#code-organization" target="_blank">https://github.com/<wbr>raywenderlich/swift-style-<wbr>guide#code-organization</a> which doesn&#39;t follow exactly the structs most of the times approach or the protocol driven development (WWDC)</div><div><br></div><div>Again thanks.</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">2017-06-29 14:21 GMT-04:00 Alex Blewitt <span dir="ltr">&lt;<a href="mailto:alblue@apple.com" target="_blank">alblue@apple.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><span><blockquote type="cite"><div>On 29 Jun 2017, at 18:16, Vitor Navarro via swift-users &lt;<a href="mailto:swift-users@swift.org" target="_blank">swift-users@swift.org</a>&gt; wrote:</div><br class="m_-4644298467004213505m_784483965333182921Apple-interchange-newline"><div><div dir="ltr">Hi,<div><br></div><div>I know this question is probably done a thousand times, but I wanted to hear from Swift dev community.</div></div></div></blockquote><div><br></div></span>What is the question?<span><br><br><blockquote type="cite"><div><div dir="ltr"><div></div><div>I think both of them have right places for usage depending on the occasion but documentation, WWDC and the internet give opposite answers regarding this.</div></div></div></blockquote><div><br></div></span>Do you have references that you can share?<span><br><br><blockquote type="cite"><div><div dir="ltr"><div></div><div>Do you guys have any guideline regarding usage here?</div></div></div></blockquote><br></span></div><div>The Swift Programming Language  sums up the similarities and differences between classes and structures quite well:</div><div><br></div><div><a href="https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html" target="_blank">https://developer.apple.com/li<wbr>brary/content/documentation/Sw<wbr>ift/Conceptual/Swift_Programmi<wbr>ng_Language/ClassesAndStructur<wbr>es.html</a></div><span class="m_-4644298467004213505HOEnZb"><font color="#888888"><div><br></div><div>Alex</div><div><br></div></font></span></div></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
swift-users mailing list<br>
<a href="mailto:swift-users@swift.org">swift-users@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" target="_blank">https://lists.swift.org/<wbr>mailman/listinfo/swift-users</a><br>
<br></blockquote></div><br></div>