<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>PS: If we’re talking about iOS here than <code>public</code> and <code>open</code> makes less sense as long as you’re not writing a framework for iOS. Each type that is considered to be used in other projects can be seen as an own module, only then access modifiers like <code>public</code> or <code>open</code> makes some sense again. ;)</p>

<p></p></div><div class="bloop_original_html"><style>body{font-family:Helvetica,Arial;font-size:13px}</style><div id="bloop_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="bloop_sign_1484758085666739968" class="bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">--&nbsp;<br>Adrian Zubarev<br>Sent with Airmail</div></div> <br><p class="airmail_on">Am 18. Januar 2017 um 17:45:10, Shawn Erickson (<a href="mailto:shawnce@gmail.com">shawnce@gmail.com</a>) schrieb:</p> <blockquote type="cite" class="clean_bq"><span><div><div></div><div>


<title></title>


<div>Yeah I am fairly sure that is by design. A lot of swifts
access controls are about getting you up and going with little work
/ boilerplate while internal to your model while requiring you to
be explicit about what you want to expose publicly outside of your
module.</div>
<div><br class="gmail_msg">
<div class="gmail_quote gmail_msg">
<div class="gmail_msg">On Wed, Jan 18, 2017 at 8:40 AM Adrian
Zubarev via swift-users &lt;<a href="mailto:swift-users@swift.org" class="gmail_msg" target="_blank">swift-users@swift.org</a>&gt;
wrote:<br class="gmail_msg"></div>
<blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word" class="gmail_msg">
<div class="m_-3878700698483847640m_-2827945217667759382bloop_markdown gmail_msg">
<p class="gmail_msg">I feel like I’ve seen this discussion
somewhere on the mailing list before. If I remember correctly or it
could be only me, this behavior is by design, because you don’t
want to open your API implicitly to everyone. Internally it won’t
hurt your module, but only allow you to write less code and use the
type right away.</p>
<br>
<br>
<br>
<br>
<p class="gmail_msg">It might be your intention of using this
<code class="gmail_msg">init(firstName:lastName)</code> only
internally, but disallow the module user from being able to
construct that type manually. (The current behavior.)</p>
<br>
<br>
<br>
<br>
<p class="gmail_msg">Please feel free to correct me if I’m wrong
here ;)</p>
<br>
<br>
<br>
<br>
<p class="gmail_msg"></p>
</div>
<div class="m_-3878700698483847640m_-2827945217667759382bloop_original_html gmail_msg">
</div>
</div>
<div style="word-wrap:break-word" class="gmail_msg">
<div class="m_-3878700698483847640m_-2827945217667759382bloop_original_html gmail_msg">
<div id="m_-3878700698483847640m_-2827945217667759382bloop_customfont" style="font-family:Helvetica,Arial;font-size:13px;color:rgba(0,0,0,1.0);margin:0px;line-height:auto" class="gmail_msg"><br class="gmail_msg"></div>
<br class="gmail_msg">
<div id="m_-3878700698483847640m_-2827945217667759382bloop_sign_1484757170073538048" class="m_-3878700698483847640m_-2827945217667759382bloop_sign gmail_msg">
<div style="font-family:helvetica,arial;font-size:13px" class="gmail_msg">--&nbsp;<br class="gmail_msg">
Adrian Zubarev<br class="gmail_msg">
Sent with Airmail</div>
</div>
</div>
</div>
<div style="word-wrap:break-word" class="gmail_msg">
<div class="m_-3878700698483847640m_-2827945217667759382bloop_original_html gmail_msg">
<br class="gmail_msg">
<p class="m_-3878700698483847640m_-2827945217667759382airmail_on gmail_msg">
Am 18. Januar 2017 um 16:33:22, Dave Reed via swift-users (<a href="mailto:swift-users@swift.org" class="gmail_msg" target="_blank">swift-users@swift.org</a>) schrieb:</p>
<blockquote type="cite" class="m_-3878700698483847640m_-2827945217667759382clean_bq gmail_msg">
<div class="gmail_msg">
<div class="gmail_msg"></div>
<div class="gmail_msg"><span class="gmail_msg">I’m teaching an iOS
with Swift this semester and one of my students pointed out
that:<br class="gmail_msg">
<br class="gmail_msg">
struct Person {<br class="gmail_msg">
var firstName: String<br class="gmail_msg">
var lastName: String<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
does create a default initializer that you can call as:<br class="gmail_msg">
p = Person(firstName: “Dave”, lastName: “Reed”)<br class="gmail_msg">
<br class="gmail_msg">
but if you write:<br class="gmail_msg">
<br class="gmail_msg">
public struct Person {<br class="gmail_msg">
var firstName: String<br class="gmail_msg">
var lastName: String<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
The default initializer is still internal so if you want it to be
public, you have to write it yourself (i.e.)<br class="gmail_msg">
<br class="gmail_msg">
public struct Person {<br class="gmail_msg">
var firstName: String<br class="gmail_msg">
var lastName: String<br class="gmail_msg">
<br class="gmail_msg">
public init(firstName: String, lastName: String) {<br class="gmail_msg">
self.firstName = firstName<br class="gmail_msg">
self.lastName = lastName<br class="gmail_msg">
}<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
Is there a way around this (other than writing it)? We both agree
it would be reasonable/nice that the default initializer have the
same protection level as the struct itself.<br class="gmail_msg">
<br class="gmail_msg">
Thanks,<br class="gmail_msg">
Dave Reed<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
swift-users mailing list<br class="gmail_msg">
<a href="mailto:swift-users@swift.org" class="gmail_msg" target="_blank">swift-users@swift.org</a><br class="gmail_msg">
<a href="https://lists.swift.org/mailman/listinfo/swift-users" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br class="gmail_msg">
</span></div>
</div>
</blockquote>
</div>
</div>
_______________________________________________<br class="gmail_msg">
<br>
<br>
swift-users mailing list<br class="gmail_msg">
<br>
<br>
<a href="mailto:swift-users@swift.org" class="gmail_msg" target="_blank">swift-users@swift.org</a><br class="gmail_msg">
<br>
<br>
<a href="https://lists.swift.org/mailman/listinfo/swift-users" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-users</a><br class="gmail_msg">

<br>
<br></blockquote>
</div>
</div>


</div></div></span></blockquote></div><div class="bloop_markdown"><p></p></div></body></html>