<div dir="ltr"><span style="font-size:12.800000190734863px">&quot;The thing is, </span><code style="font-family:menlo,consolas,&#39;liberation mono&#39;,courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:rgb(248,248,248);border:1px solid rgb(234,234,234);margin:0px 2px;padding:0px 5px;word-break:normal;word-wrap:normal">typeprivate</code><span style="font-size:12.800000190734863px"> cannot replace </span><code style="font-family:menlo,consolas,&#39;liberation mono&#39;,courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:rgb(248,248,248);border:1px solid rgb(234,234,234);margin:0px 2px;padding:0px 5px;word-break:normal;word-wrap:normal">fileprivate</code><span style="font-size:12.800000190734863px">, just because </span><code style="font-family:menlo,consolas,&#39;liberation mono&#39;,courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:rgb(248,248,248);border:1px solid rgb(234,234,234);margin:0px 2px;padding:0px 5px;word-break:normal;word-wrap:normal">fileprivate</code><span style="font-size:12.800000190734863px"> adds internal visibility to other scopes inside the same file and does not restrict it to the same type. And I really love that aspect of Swift. :)&quot;</span><br><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px">While I do see the advantages in exposing members within the same file, we must agree that can promote somehow odd patterns of chunking code into the same file. As I said before,  that&#39;s definitely not the intent, however there&#39;s no mechanism of preventing it. I believe typeprivate would definitely help in scoping and improving code readability while we&#39;re at it!</span></div><div><br></div><div><pre style="white-space:pre-wrap;margin-top:15px;margin-bottom:15px;font-family:menlo,consolas,&#39;liberation mono&#39;,courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:rgb(248,248,248);border:1px solid rgb(204,204,204);overflow:auto;padding:4px 8px;word-break:normal;word-wrap:normal"><code class="gmail-m_7202937532688185325swift" style="font-family:menlo,consolas,&#39;liberation mono&#39;,courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;color:inherit;border:0px;margin:0px;padding:0px;word-break:normal;word-wrap:normal">private       // like `private(scope)`
private(file) // like `internal(file)`
private(type) // in your case</code></pre></div><div><span style="font-size:12.800000190734863px">I must say I am very fond of this solution as well. It clearly conveys the idea.</span></div><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px">&quot;PS: I also cannot wait for existentials to drop </span><code style="font-family:menlo,consolas,&#39;liberation mono&#39;,courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:rgb(248,248,248);border:1px solid rgb(234,234,234);margin:0px 2px;padding:0px 5px;word-break:normal;word-wrap:normal">typealias ProtoB = Any&lt;Proto&gt; where Proto.A == B</code><span style="font-size:12.800000190734863px"> where </span><code style="font-family:menlo,consolas,&#39;liberation mono&#39;,courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:rgb(248,248,248);border:1px solid rgb(234,234,234);margin:0px 2px;padding:0px 5px;word-break:normal;word-wrap:normal">B</code><span style="font-size:12.800000190734863px"> comes from a generic parameter list and </span><code style="font-family:menlo,consolas,&#39;liberation mono&#39;,courier,monospace;font-size:10pt;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;background-color:rgb(248,248,248);border:1px solid rgb(234,234,234);margin:0px 2px;padding:0px 5px;word-break:normal;word-wrap:normal">A</code><span style="font-size:12.800000190734863px"> is an associated type.&quot;</span></div><div><span style="font-size:12.800000190734863px">Same here!</span></div><div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px">Best,</span></div><div><span style="font-size:12.800000190734863px">Gonçalo</span></div><div><span style="font-size:12.800000190734863px"><br></span></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-12-02 11:58 GMT+00:00 Adrian Zubarev <span dir="ltr">&lt;<a href="mailto:adrian.zubarev@devandartist.com" target="_blank">adrian.zubarev@devandartist.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 class="m_7202937532688185325bloop_markdown"><p>IMO there is no need for something like <code>typepublic</code> to even exist, but in theory it would be something like where a subclass has more visibility of the internal stuff of its super type. I’m just saying that someone will want this, because that person might thing that <code>typepublic</code> and <code>typeprivate</code> would be consistent.</p>

<p>In general I’m for anything that adds flexibility, but flexibility means also more complexity. </p>

<p>The thing is, <code>typeprivate</code> cannot replace <code>fileprivate</code>, just because <code>fileprivate</code> adds internal visibility to other scopes inside the same file and does not restrict it to the same type. And I really love that aspect of Swift. :)</p>

<p>It already has been discussed thousands of times but I cannot resist and also state my preference to something like:</p>

<pre><code class="m_7202937532688185325swift">private       // like `private(scope)`
private(file) // like `internal(file)`
private(type) // in your case
</code></pre>

<hr>

<p>This is a POP language right? So lets focus on fixing and improving protocols. :) We should start with <code>open/public protocol</code>.</p>

<hr>

<p>PS: I also cannot wait for existentials to drop <code>typealias ProtoB = Any&lt;Proto&gt; where Proto.A == B</code> where <code>B</code> comes from a generic parameter list and <code>A</code> is an associated type.</p>

<p></p></div><div class="m_7202937532688185325bloop_original_html"><span class=""><div id="m_7202937532688185325bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto"><br></div> <br> <div id="m_7202937532688185325bloop_sign_1480678877241395968" class="m_7202937532688185325bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">-- <br>Adrian Zubarev<br>Sent with Airmail</div></div> <br></span><span class=""><p class="m_7202937532688185325airmail_on">Am 2. Dezember 2016 um 12:36:45, Gonçalo Alvarez Peixoto (<a href="mailto:goncalo.alvarezpeixoto@gmail.com" target="_blank">goncalo.alvarezpeixoto@gmail.<wbr>com</a>) schrieb:</p> <blockquote type="cite" class="m_7202937532688185325clean_bq"><span><div><span style="color:rgb(0,0,0);font-family:&#39;helvetica Neue&#39;,helvetica;font-size:14px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);display:inline!important;float:none">Also, would you be so kind to provide an example where typepublic would be useful? Maybe you&#39;re thinking of allowing member access to subclasses? Would that fall into a possible &quot;protected&quot; realm?</span></div></span></blockquote></span></div><div class="m_7202937532688185325bloop_markdown"><p></p></div></div></blockquote></div><br></div>