<html><head><style>
body {
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        padding:1em;
        margin:auto;
        background:#fefefe;
}
h1, h2, h3, h4, h5, h6 {
        font-weight: bold;
}
h1 {
        color: #000000;
        font-size: 28pt;
}
h2 {
        border-bottom: 1px solid #CCCCCC;
        color: #000000;
        font-size: 24px;
}
h3 {
        font-size: 18px;
}
h4 {
        font-size: 16px;
}
h5 {
        font-size: 14px;
}
h6 {
        color: #777777;
        background-color: inherit;
        font-size: 14px;
}
hr {
        height: 0.2em;
        border: 0;
        color: #CCCCCC;
        background-color: #CCCCCC;
display: inherit;
}
p, blockquote, ul, ol, dl, li, table, pre {
        margin: 15px 0;
}
a, a:visited {
        color: #4183C4;
        background-color: inherit;
        text-decoration: none;
}
#message {
        border-radius: 6px;
        border: 1px solid #ccc;
        display:block;
        width:100%;
        height:60px;
        margin:6px 0px;
}
button, #ws {
        font-size: 12 pt;
        padding: 4px 6px;
        border-radius: 5px;
        border: 1px solid #bbb;
        background-color: #eee;
}
code, pre, #ws, #message {
        font-family: Monaco;
        font-size: 10pt;
        border-radius: 3px;
        background-color: #F8F8F8;
        color: inherit;
}
code {
        border: 1px solid #EAEAEA;
        margin: 0 2px;
        padding: 0 5px;
}
pre {
        border: 1px solid #CCCCCC;
        overflow: auto;
        padding: 4px 8px;
}
pre > code {
        border: 0;
        margin: 0;
        padding: 0;
}
#ws { background-color: #f8f8f8; }
.bloop_markdown table {
border-collapse: collapse;
font-family: Helvetica, arial, freesans, clean, sans-serif;
color: rgb(51, 51, 51);
font-size: 15px; line-height: 25px;
padding: 0; }
.bloop_markdown table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
.bloop_markdown table tr:nth-child(2n) {
background-color: #f8f8f8; }
.bloop_markdown table tr th {
font-weight: bold;
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }
.bloop_markdown table tr td {
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }
.bloop_markdown table tr th :first-child, table tr td :first-child {
margin-top: 0; }
.bloop_markdown table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }
.bloop_markdown blockquote{
border-left: 4px solid #dddddd;
padding: 0 15px;
color: #777777; }
blockquote > :first-child {
margin-top: 0; }
blockquote > :last-child {
margin-bottom: 0; }
code, pre, #ws, #message {
word-break: normal;
word-wrap: normal;
}
hr {
display: inherit;
}
.bloop_markdown :first-child {
-webkit-margin-before: 0;
}
code, pre, #ws, #message {
font-family: Menlo, Consolas, Liberation Mono, Courier, monospace;
}
.send { color:#77bb77; }
.server { color:#7799bb; }
.error { color:#AA0000; }</style></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="bloop_markdown"><p>Updated with a third suggestion which makes it more clear that ‘closed’ by default simply does not work without allowing the existence of closed protocols. </p>
<p>Formated version: <a href="https://gist.github.com/DevAndArtist/ae33145aa71a6212981b54c307e7c1e6/edit">https://gist.github.com/DevAndArtist/ae33145aa71a6212981b54c307e7c1e6/edit</a></p>
<hr>
<table>
<colgroup>
<col style="text-align:center;">
<col style="text-align:center;">
<col style="text-align:center;">
<col style="text-align:center;">
<col style="text-align:center;">
</colgroup>
<thead>
<tr>
        <th style="text-align:center;">Suggestion 1</th>
        <th style="text-align:center;">Suggestion 2</th>
        <th style="text-align:center;">Suggestion 3</th>
        <th style="text-align:center;">Swift 3</th>
        <th style="text-align:center;">Implication of #3</th>
</tr>
</thead>
<tbody>
<tr>
        <td style="text-align:center;">public</td>
        <td style="text-align:center;">open</td>
        <td style="text-align:center;">open public</td>
        <td style="text-align:center;"><strong>open</strong></td>
        <td style="text-align:center;">open</td>
</tr>
<tr>
        <td style="text-align:center;">closed public</td>
        <td style="text-align:center;">public</td>
        <td style="text-align:center;">public</td>
        <td style="text-align:center;"><strong>public</strong></td>
        <td style="text-align:center;">public</td>
</tr>
<tr>
        <td style="text-align:center;">fixed public</td>
        <td style="text-align:center;"></td>
        <td style="text-align:center;"></td>
        <td style="text-align:center;"> </td>
        <td style="text-align:center;"></td>
</tr>
<tr>
        <td style="text-align:center;">final public</td>
        <td style="text-align:center;">closed</td>
        <td style="text-align:center;">final public</td>
        <td style="text-align:center;"><strong>final public</strong></td>
        <td style="text-align:center;">final public</td>
</tr>
<tr>
        <td style="text-align:center;">internal</td>
        <td style="text-align:center;">internal</td>
        <td style="text-align:center;">internal</td>
        <td style="text-align:center;"><strong>internal</strong></td>
        <td style="text-align:center;">internal</td>
</tr>
<tr>
        <td style="text-align:center;">final internal</td>
        <td style="text-align:center;">final internal</td>
        <td style="text-align:center;">final internal</td>
        <td style="text-align:center;"><strong>final internal</strong></td>
        <td style="text-align:center;">final internal</td>
</tr>
<tr>
        <td style="text-align:center;">private</td>
        <td style="text-align:center;">private</td>
        <td style="text-align:center;">private</td>
        <td style="text-align:center;"><strong>fileprivate</strong></td>
        <td style="text-align:center;">private</td>
</tr>
<tr>
        <td style="text-align:center;">final private</td>
        <td style="text-align:center;">final private</td>
        <td style="text-align:center;">final private</td>
        <td style="text-align:center;"><strong>final fileprivate</strong></td>
        <td style="text-align:center;">final private</td>
</tr>
<tr>
        <td style="text-align:center;">scoped</td>
        <td style="text-align:center;">scoped</td>
        <td style="text-align:center;">scoped</td>
        <td style="text-align:center;"><strong>private</strong></td>
        <td style="text-align:center;">scoped</td>
</tr>
</tbody>
</table>
<ul>
<li><code>open</code> is no more an <strong>exclusive</strong> access modifier, which shouldn’t exist in the first place, because of the mentioned exclusivity. That’s what attributes are meant for.</li>
<li>Allowing <code>closed public protocol</code>s seems straightforward for <strong>Suggestion 1</strong>.</li>
<li>First suggestion aligns the <code>closed</code> attribute very well with <code>final</code> and its purpose becomes crystal clear.</li>
<li><code>scoped</code> is a <em>straw_hat_name</em> from the on going discussions, you can replace it with something better.</li>
<li><code>fixed public</code> is from Matthew’s discussion thread.</li>
<li>Third suggestion makes <code>open</code> as an attribute, however this is a breaking change for all other types different form classes, because currently protocols have open semantics, and value types might get subtypes one day, which makes them closed by today’s standards. The default in the first suggestion is alway open, compared to the third suggestion, which is closed.</li>
<li>The implication of the third suggestion is the necessary fix for protocols: <code>open/public protocol</code> (shown in the last row).</li>
</ul>
<p></p></div><div class="bloop_original_html"><style>
body {
        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
        padding:1em;
        margin:auto;
        background:#fefefe;
}
h1, h2, h3, h4, h5, h6 {
        font-weight: bold;
}
h1 {
        color: #000000;
        font-size: 28pt;
}
h2 {
        border-bottom: 1px solid #CCCCCC;
        color: #000000;
        font-size: 24px;
}
h3 {
        font-size: 18px;
}
h4 {
        font-size: 16px;
}
h5 {
        font-size: 14px;
}
h6 {
        color: #777777;
        background-color: inherit;
        font-size: 14px;
}
hr {
        height: 0.2em;
        border: 0;
        color: #CCCCCC;
        background-color: #CCCCCC;
display: inherit;
}
p, blockquote, ul, ol, dl, li, table, pre {
        margin: 15px 0;
}
a, a:visited {
        color: #4183C4;
        background-color: inherit;
        text-decoration: none;
}
#message {
        border-radius: 6px;
        border: 1px solid #ccc;
        display:block;
        width:100%;
        height:60px;
        margin:6px 0px;
}
button, #ws {
        font-size: 12 pt;
        padding: 4px 6px;
        border-radius: 5px;
        border: 1px solid #bbb;
        background-color: #eee;
}
code, pre, #ws, #message {
        font-family: Monaco;
        font-size: 10pt;
        border-radius: 3px;
        background-color: #F8F8F8;
        color: inherit;
}
code {
        border: 1px solid #EAEAEA;
        margin: 0 2px;
        padding: 0 5px;
}
pre {
        border: 1px solid #CCCCCC;
        overflow: auto;
        padding: 4px 8px;
}
pre > code {
        border: 0;
        margin: 0;
        padding: 0;
}
#ws { background-color: #f8f8f8; }
.bloop_markdown table {
border-collapse: collapse;
font-family: Helvetica, arial, freesans, clean, sans-serif;
color: rgb(51, 51, 51);
font-size: 15px; line-height: 25px;
padding: 0; }
.bloop_markdown table tr {
border-top: 1px solid #cccccc;
background-color: white;
margin: 0;
padding: 0; }
.bloop_markdown table tr:nth-child(2n) {
background-color: #f8f8f8; }
.bloop_markdown table tr th {
font-weight: bold;
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }
.bloop_markdown table tr td {
border: 1px solid #cccccc;
margin: 0;
padding: 6px 13px; }
.bloop_markdown table tr th :first-child, table tr td :first-child {
margin-top: 0; }
.bloop_markdown table tr th :last-child, table tr td :last-child {
margin-bottom: 0; }
.bloop_markdown blockquote{
border-left: 4px solid #dddddd;
padding: 0 15px;
color: #777777; }
blockquote > :first-child {
margin-top: 0; }
blockquote > :last-child {
margin-bottom: 0; }
code, pre, #ws, #message {
word-break: normal;
word-wrap: normal;
}
hr {
display: inherit;
}
.bloop_markdown :first-child {
-webkit-margin-before: 0;
}
code, pre, #ws, #message {
font-family: Menlo, Consolas, Liberation Mono, Courier, monospace;
}
.send { color:#77bb77; }
.server { color:#7799bb; }
.error { color:#AA0000; }</style></div><div class="bloop_markdown"><p></p></div></body></html>