<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">I agree with Ted that I would have expected the inner members of a class to be private by default. (Not a big deal if I have to explicitly prefix most of my concerned vars now - but it is just different to what I would have expected). Certainly,
 in the past, I would be more used to having to explicitly define chosen vars as “public” ( e.g. in the past world of&nbsp;Objective C I &nbsp;was used to defining selected vars with @synthesize to “open them up&quot; )&nbsp;</div>
<div class="">
<div class=""><br class="">
</div>
</div>
<div>
<blockquote type="cite" class="">
<div class="">On 13 Oct 2016, at 22:27, Ted F.A. van Gaalen via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">Please do NOT drop the current distinction between *private* and *fileprivate*</div>
<div class="">as it is now in Swift 3</div>
<div class="">It is needed for correct OOP. &nbsp;</div>
<div class=""><br class="">
</div>
<div class="">As written before, but now a bit more compact, I hope:</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">I would like to have the inner members of a class as default private,&nbsp;</div>
<div class="">(not fileprivate) &nbsp;that is, that each entity inside the class body is not visible&nbsp;</div>
<div class="">in the outer scope. not even in the same file!</div>
<div class=""><br class="">
</div>
<div class="">I would only reveal entities of a class to the outer scope that are needed.there.</div>
<div class="">(as is the case with class properties in Objective-C and most other OOP supporting languages)</div>
</div>
<div class=""><br class="">
</div>
<div class="">This is what I have to do now,</div>
<div class="">
<div class="">Each and every entity that I wish to keep hidden</div>
<div class="">I have to prefix with *private*: like in this example class:&nbsp;</div>
<div class="">This is tedious and should be unnecessary.</div>
</div>
<div class=""><br class="">
</div>
<div class="">
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">class</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;TG3DGauge:&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">SCNNode</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">{</span></div>
<div style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; min-height: 20px;" class="">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;&nbsp; &nbsp;</span><br class="webkit-block-placeholder">
</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">private</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;needles
 = [</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">SCNNode</span><span class="" style="font-variant-ligatures: no-common-ligatures;">]()</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">private</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;fmtStr
 =&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(209, 47, 27);">“&quot;&nbsp;</span><span class="" style="color: rgb(0, 132, 0);">// private should be the default!</span></div>
<div style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; min-height: 20px;" class="">
&nbsp; &nbsp;&nbsp;<br class="webkit-block-placeholder">
</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;value:&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">CGFloat</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;=&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(39, 42, 216);">0
 &nbsp;// access default “internal”! Visible to the outside world.</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; {</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; color: rgb(0, 132, 0);">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">didSet</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;&nbsp;</span>//
 trigger value change, rotate needles etc.</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; &nbsp; &nbsp; {</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(49, 89, 93);">valueChange</span><span class="" style="font-variant-ligatures: no-common-ligatures;">()</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; &nbsp; &nbsp; }</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; }</span></div>
<div style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; min-height: 20px;" class="">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;&nbsp; &nbsp;</span><br class="webkit-block-placeholder">
</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">private</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;nodeUnitText
 =&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">SCNNode</span><span class="" style="font-variant-ligatures: no-common-ligatures;">()</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">private</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;nodeValueText
 =&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">SCNNode</span><span class="" style="font-variant-ligatures: no-common-ligatures;">()</span></div>
<div style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; min-height: 20px;" class="">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;&nbsp; &nbsp;</span><br class="webkit-block-placeholder">
</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">private</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;valRange:&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">ClosedRange</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&lt;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">CGFloat</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&gt;
 = (</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(39, 42, 216);">0</span><span class="" style="font-variant-ligatures: no-common-ligatures;">...</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(39, 42, 216);">100.0</span><span class="" style="font-variant-ligatures: no-common-ligatures;">)</span></div>
<div style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; min-height: 20px;" class="">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">private</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;valScaleFactor:&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">CGFloat</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;=&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(39, 42, 216);">1</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(39, 42, 216);"><br class="">
</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(39, 42, 216);"><span class="Apple-tab-span" style="white-space: pre;"></span></span><span class="" style="color: rgb(0, 132, 0);">// etc. much more stuff here and</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="color: rgb(0, 132, 0);">&nbsp; &nbsp; &nbsp; &nbsp; // most of it should be private, that is</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="color: rgb(0, 132, 0);">&nbsp; &nbsp; &nbsp; &nbsp; // only visible within the class body!</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<font color="#272ad8" class=""><span class="Apple-tab-span" style="white-space: pre;"></span>.</font></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<font color="#272ad8" class="">&nbsp; &nbsp; &nbsp; &nbsp; .</font></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<font color="#272ad8" class="">}&nbsp;</font><span class="" style="color: rgb(0, 132, 0);">// end class TG3DGauge</span></div>
</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<br class="">
</div>
<div class="" style="margin: 0px; line-height: normal;">If I don’t specify an access modifier, then the default</div>
<div class="" style="margin: 0px; line-height: normal;">for the items defined in classes is *internal*,</div>
<div class="" style="margin: 0px; line-height: normal;">which means that these items are visible in the whole application source.</div>
<div class="" style="margin: 0px; line-height: normal;"><br class="">
</div>
<div class="" style="margin: 0px; line-height: normal;">However, this is only desirable for items that I want to</div>
<div class="" style="margin: 0px; line-height: normal;">reveal explicitly, of course.&nbsp;</div>
<div class="" style="margin: 0px; line-height: normal;">That is exactly why I need the *private* access modifier as it is now&nbsp;</div>
<div class="" style="margin: 0px; line-height: normal;">and not *fileprivate* &nbsp;</div>
<div class="" style="margin: 0px; line-height: normal;">
<div class="">So I am very glad that this access modifier *private* finally became&nbsp;</div>
<div class="">available in Swift 3</div>
<div class=""><br class="">
</div>
</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="color: rgb(0, 132, 0);">
<div class="" style="font-family: Helvetica; font-size: 12px;">
<div class="">In my classes, *private* is probably the most used keyword, but</div>
<div class="">*private* should be the default for entities within a class body</div>
<div class="">just like it is for entities within functions.</div>
</div>
<div class="" style="font-family: Helvetica; font-size: 12px;"><br class="">
</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">As far as I know, prefixing with *private* is the only solution in Swift to protect</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">functions, vars etc. in my class against unwanted access&nbsp;</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">from the outer scope. I think this is not the way it should be.&nbsp;</div>
<div class="" style="font-family: Helvetica; font-size: 12px;"><br class="">
</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">Making all entities in a class private prevents this.</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">and offers also reasonable protection against</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">the Fragile Base Class problem, (thanks Chris for url) :</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">&nbsp;<a href="https://en.wikipedia.org/wiki/Fragile_base_class" class="">https://en.wikipedia.org/wiki/Fragile_base_class</a></div>
<div class="" style="font-family: Helvetica; font-size: 12px;"><br class="">
</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">A solution for as it is now, albeit not a perfect one would be,&nbsp;</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">to have some sort of access modifier which defines&nbsp;</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">all items within the class to be private by default.</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">perhaps the keyword *closedscope* like in this example:</div>
<div class="" style="font-family: Helvetica; font-size: 12px;"><br class="">
</div>
<div class="" style="font-family: Helvetica; font-size: 12px;">
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="color: rgb(186, 45, 162);">closedscope</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">class</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;TG3DGauge:&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">SCNNode</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">{</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; min-height: 20px;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;&nbsp; &nbsp;</span><br class="webkit-block-placeholder">
</div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;needles
 = [</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">SCNNode</span><span class="" style="font-variant-ligatures: no-common-ligatures;">]() &nbsp;</span><span class="" style="color: rgb(0, 132, 0);">// is now private
 by default</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;fmtStr
 =&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(209, 47, 27);">“&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span class="" style="color: rgb(0, 132, 0);">// is now private by default</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="color: rgb(0, 132, 0);"><br class="">
</span></div>
<div class="" style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo;">
<span class="" style="color: rgb(0, 132, 0);">
<div class="" style="font-family: Helvetica; font-size: 12px; margin: 0px; line-height: normal;">
<span class="" style="font-family: Menlo; font-size: 17px; font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-family: Menlo; font-size: 17px; font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">public var</span><span class="" style="font-family: Menlo; font-size: 17px; font-variant-ligatures: no-common-ligatures;">&nbsp;value:&nbsp;</span><span class="" style="font-family: Menlo; font-size: 17px; font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">CGFloat</span><span class="" style="font-family: Menlo; font-size: 17px; font-variant-ligatures: no-common-ligatures;">&nbsp;=&nbsp;</span><span class="" style="font-family: Menlo; font-size: 17px; font-variant-ligatures: no-common-ligatures; color: rgb(39, 42, 216);">0&nbsp;</span><font color="#008400" face="Menlo" class=""><span class="" style="font-size: 17px;">//
 Public!! visible outside class&nbsp;</span></font></div>
<div class="" style="font-family: Helvetica; font-size: 12px; margin: 0px; line-height: normal;">
<font color="#008400" face="Menlo" class=""><span class="" style="font-size: 17px;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// “fileprivate&quot; or&nbsp;“internal” &nbsp;can also be used.</span></font></div>
<div class="" style="font-family: Helvetica; font-size: 12px; margin: 0px; line-height: normal;">
<span class="" style="font-family: Menlo; font-size: 17px;">&nbsp; &nbsp;</span><span class="" style="font-family: Menlo; font-size: 17px;">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 17px;">{</span></div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">didSet</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures;">//
 trigger value change, rotate needles etc.</span></div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;{</span></div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(49, 89, 93);">valueChange</span><span class="" style="font-variant-ligatures: no-common-ligatures;">()</span></div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;}</span></div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;}</span></div>
<div class="" style="margin: 0px; line-height: normal; min-height: 20px;"><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;&nbsp; &nbsp;</span><br class="webkit-block-placeholder">
</div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;nodeUnitText
 =&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">SCNNode</span><span class="" style="font-variant-ligatures: no-common-ligatures;">() &nbsp;</span><span class="" style="color: rgb(0, 132, 0);">// is now private
 by default</span></div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp; &nbsp;&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(186, 45, 162);">var</span><span class="" style="font-variant-ligatures: no-common-ligatures;">&nbsp;nodeValueText
 =&nbsp;</span><span class="" style="font-variant-ligatures: no-common-ligatures; color: rgb(112, 61, 170);">SCNNode</span><span class="" style="font-variant-ligatures: no-common-ligatures;">()&nbsp;</span><span class="" style="color: rgb(0, 132, 0);">// is now private
 by default</span></div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(0, 132, 0);"><br class="">
</span></div>
<div class="" style="margin: 0px; line-height: normal;"><span class="" style="color: rgb(0, 132, 0);">&nbsp; &nbsp; //etc.</span></div>
</span></div>
<div style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; min-height: 20px;" class="">
<br class="">
</div>
<div style="margin: 0px; font-size: 17px; line-height: normal; font-family: Menlo; min-height: 20px;" class="">
<br class="">
</div>
<div class="">Again, for this reasons, don’t drop the distinction between</div>
<div class="">between *fileprivate* and *private*&nbsp;</div>
<div class="">if this is done, there is afaics no way to protect items within a class body.</div>
<div class="">Leave it as it is now, please. (also to prevent source breaking as well)</div>
<div class=""><br class="">
</div>
<div class="">(btw, the above TG3DGauge class is a perfect example:&nbsp;</div>
<div class="">With real gauges it would not be a good idea if one can touch</div>
<div class="">the needles and gears inside the gauge’s casing,</div>
<div class="">which is exactly the case with OOP. e.g.</div>
<div class="">In my class example people would e.g. be able to set the angle</div>
<div class="">from needles (if not declared private) &nbsp;directly, without updating the value.)&nbsp;</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">TedvG</div>
<div class=""><a href="http://www.tedvg.com/" class="">www.tedvg.com</a>&nbsp; (see my gauges from above class here)</div>
</div>
<div class="" style="font-family: Helvetica; font-size: 12px;"><br class="">
</div>
</span></div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">
<blockquote type="cite" class=""></blockquote>
<blockquote type="cite" class="">
<blockquote type="cite" class="">Le 13 oct. 2016 à 07:52, Chris Lattner via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; a écrit :<br class="">
<br class="">
On Oct 12, 2016, at 9:56 PM, Russ Bishop via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&nbsp;&lt;<a href="mailto:swift-evolution@swift.org" class="">mailto:swift-evolution@swift.org</a>&gt;&gt; wrote:<br class="">
<blockquote type="cite" class="">
<blockquote type="cite" class="">
<blockquote type="cite" class="">I actually consider it very lucky that most of our changes so far have been fairly non-controversial. Everybody has a different idea of what would make Swift a better language, and all of us well-meaning. But when those ideas
 conflict, some group is going to end up unhappy. I'm actually very glad that (a) we haven't had too many of these cases, and (b) even when we have, people have been able to accept it and move on to contributing to the next issue.<br class="">
</blockquote>
<br class="">
<br class="">
Strong agreement here as well. This proposal has been litigated numerous times already, and the bar for source-breaking changes is much higher now. To effectively re-open the discussion would require a proposal that significant changes the model with a lot
 of evidence that such a new model is a drastic improvement over what we have now. “Back out SE-0025” is not a viable option now.<br class="">
<br class="">
<span class="Apple-tab-span" style="white-space: pre;"></span>- Doug<br class="">
</blockquote>
<br class="">
Not really. This proposal could be backed out without source-breaking changes by treating private as a synonym for fileprivate and we’d have Swift 2 behavior without breaking source. If the core team doesn’t want to consider that then we can just move on and
 live with it.&nbsp;<br class="">
</blockquote>
<br class="">
Not speaking for the core team, just MHO:<br class="">
<br class="">
I agree with Russ here, and with others who have said upthread that the “thing that has changed” is that we are starting to get usage experience with fileprivate vs private. &nbsp;I think we all understand the value of having fewer access control levels, and so
 if “private” isn’t conceptually pulling its weight, then it is reasonable to consider phasing it out.<br class="">
<br class="">
That said, there is no specific rush to have this discussion, and I think it is reasonable to put a pretty high burden of proof on someone who wants to drive such a proposal. &nbsp;For example, if we had the discussion in the spring timeframe, we should have a pretty
 large body of Swift 3 code readily at hand (e.g. SwiftPM packages and other various github repos).<br class="">
<br class="">
Given that, it should be easy enough to see how widely private is actually being used in practice. &nbsp;If it is very rare, then the argument to ditch it (make it a synonym for fileprivate, and eventually phasing out fileprivate) is strong. &nbsp;If lots of people are
 using private and only some are using fileprivate, then the discussion is quite different.<br class="">
<br class="">
-Chris<br class="">
</blockquote>
<br class="">
I don’t think monitoring the usage of private vs fileprivate is fair. By default, people will use private until they encounter visibility issues and discover they need to change to fileprivate. So private will probably being use far more than fileprivate.<br class="">
Nonetheless it does not mean people chosen private because it effectively reduce the visibility to the class scope, but just because it is easier to discover and to type than fileprivate and fit in many cases.<br class="">
<br class="">
I tend to write class will all ivars private by default (as it is a sensible default), and then, when I start to write extensions and other parts, I have to switch to fileprivate for a bunch of ivars. It create an inconsistent mess in my ivars declaration as
 it is difficult to know if an ivar is private because I has to be, or because I didn’t encounter a case that need it to be fileprivate instead.<br class="">
<br class="">
Honestly, I don’t see any value in the introduction of fileprivate.<br class="">
</blockquote>
</div>
</div>
_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">
https://lists.swift.org/mailman/listinfo/swift-evolution<br class="">
</div>
</blockquote>
</div>
<br class="">
</body>
</html>