<div dir="ltr"><div>This should be resolved when <a href="http://article.gmane.org/gmane.comp.lang.swift.evolution/3082">PwS </a>(Protocol with Storage) get alive:<br></div><div><br></div><div><span style="line-height:21.6667px">  // Framework land</span><br style="line-height:21.6667px"><span style="line-height:21.6667px">        public protocol DatabaseRecord {</span></div><div dir="ltr"><div><span style="line-height:21.6667px">                var persistedRow: DatabaseRow { get }</span><br style="line-height:21.6667px"><span style="line-height:21.6667px">                static func databaseTableName() -&gt; String</span><br style="line-height:21.6667px"><span style="line-height:21.6667px">                init(row: DatabaseRow)</span><br style="line-height:21.6667px"><span style="line-height:21.6667px">        }</span><br></div></div><div dir="ltr"><div><div style="line-height:21.6667px"><span style="line-height:21.6667px">      internal extension DatabaseRecord {</span></div><div style="line-height:21.6667px"><span style="line-height:21.6667px"><b>                var referenceRow: DatabaseRow</b></span></div><div><span style="line-height:21.6667px">                // or other storage. Syntax and place of declarations is not defined.</span></div><div style="line-height:21.6667px"><span style="line-height:21.6667px">       }</span></div><span style="line-height:21.6667px">       </span><span style="line-height:21.6667px">public</span><span style="line-height:21.6667px"> </span><span style="line-height:21.6667px"> </span><span style="line-height:21.6667px">extension DatabaseRecord {</span></div></div><div dir="ltr"><div style="line-height:21.6667px"><span style="line-height:21.6667px">                var hasChanges: Bool {</span><br></div><div style="line-height:21.6667px"><span style="line-height:21.6667px">                        // return complex computation based on referenceRow and persistedRow</span><br style="line-height:21.6667px"><span style="line-height:21.6667px">                }</span><br style="line-height:21.6667px"><span style="line-height:21.6667px">        }</span></div></div><div><br></div><div><br></div><div>This is another proposal, but the idea is improve the current protocol model instead to create another type just because a single skill.</div><div><br></div><div class="gmail_quote"><div dir="ltr">Em sex, 4 de mar de 2016 às 16:28, Gwendal Roué &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; escreveu:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
&gt; Le 4 mars 2016 à 20:24, Gwendal Roué &lt;<a href="mailto:gwendal.roue@gmail.com" target="_blank">gwendal.roue@gmail.com</a>&gt; a écrit :<br>
&gt;<br>
&gt;<br>
&gt;&gt; Le 4 mars 2016 à 08:45, Brent Royal-Gordon via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt; a écrit :<br>
&gt;&gt;<br>
&gt;&gt;&gt; For modeling subtype requirements we would need the ability to declare protocol members with reduced access scope like private or internal and hopefully protected, as subtype requirements most often are not public.<br>
&gt;&gt;<br>
&gt;&gt; I&#39;ve spoken about this elsewhere, but:<br>
&gt;&gt;<br>
&gt;&gt; - For both abstract classes and protocols, all required/abstract members need to be visible everywhere you&#39;re permitted to conform/inherit.<br>
&gt;&gt; - There is currently no way in Swift to decouple a protocol&#39;s/class&#39;s visibility from the ability to conform to/inherit from it, so neither construct can currently offer this feature.<br>
&gt;&gt; - However, this feature is likely to come at least for classes as part of resiliency. I think it&#39;s a good idea for protocols, too.<br>
&gt;<br>
&gt; Brent, please consider the sample code below:<br>
<br>
I just wanted to put focus on the visibility issues, which you could not see (it seems). Your general arguments about ways to improve protocols so that not only classes could be enhanced remain quite valid and inspiring.<br>
<br>
Gwendal<br>
<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote></div></div>