<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8">
</head>
<body>
<div style="font-family:sans-serif"><div style="white-space:normal">
<p dir="auto">Yes, this should be true for most types.<br>
The compiler derives conformance based on a nested <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">CodingKeys</code> type within your <code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0 0.4em" bgcolor="#F7F7F7">Codable</code> type. If you do not supply one, it will derive one on your behalf, but if you do provide one, making a naming transition like this is trivial:</p>

<pre style="background-color:#F7F7F7; border-radius:5px 5px 5px 5px; margin-left:15px; margin-right:15px; max-width:90vw; overflow-x:auto; padding:5px; color:black" bgcolor="#F7F7F7"><code style="background-color:#F7F7F7; border-radius:3px; margin:0; padding:0" bgcolor="#F7F7F7"><span style="color: #008800; font-weight: bold">public</span> <span style="color: #008800; font-weight: bold">struct</span> <span style="color: #BB0066; font-weight: bold">Post</span> : Codable {
    <span style="color: #008800; font-weight: bold">let</span> <span style="color: #996633">authorID</span>: <span style="color: #007020">Int</span>
    <span style="color: #008800; font-weight: bold">let</span> <span style="color: #996633">authorName</span>: <span style="color: #007020">String</span>
    <span style="color: #008800; font-weight: bold">let</span> <span style="color: #996633">bodyText</span>: <span style="color: #007020">String</span>

    <span style="color: #008800; font-weight: bold">private</span> <span style="color: #008800; font-weight: bold">enum</span> <span style="color: #BB0066; font-weight: bold">CodingKeys</span>: <span style="color: #007020">String</span>, CodingKey {
        <span style="color: #008800; font-weight: bold">case</span> authorID = <span style="background-color: #fff0f0">"author_id"</span>
        <span style="color: #008800; font-weight: bold">case</span> authorName = <span style="background-color: #fff0f0">"author_name"</span>
        <span style="color: #008800; font-weight: bold">case</span> bodyText = <span style="background-color: #fff0f0">"body_text"</span>
    }

    <span style="color: #888888">// init(from:) and encode(to:) are still automatically generated</span>
}
</code></pre>



<p dir="auto">This is something we wanted to explicitly support as we don't want users to have to violate Swift naming guidelines, and is a step along the progressive disclosure of the API that we want to provide.<br>
As long as the case names of the enum match 1-to-1 with property names, derived conformance still applies.</p>

<p dir="auto">On 1 May 2017, at 11:39, Anders Ha wrote:</p>

<p dir="auto"></p></div>
<div style="white-space:normal"></div>
<blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px"><div id="CA6DE7FF-AB09-48C0-A0D6-D0E773C5C232"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I thought it would be quite trivial to have the JSON encoder and decoder transforming the keys between camel case and snake case, wouldn't it?</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><div>Regards</div><div>Anders</div><br class=""><blockquote type="cite" class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"></div></blockquote></div><div><blockquote type="cite" class=""><div class="">On 2 May 2017, at 1:57 AM, Jon Shier 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=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>FYI, I’d give the derived implementations a very low chance of ever being used for JSON. Unless developers violate the Swift naming guidelines for their properties at least or they don’t have properties with multiword keys.</div></div></blockquote><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><span class="Apple-tab-span" style="white-space:pre">        </span>Once this functionality has landed for the Swift 4 branch, I plan to implement some of the tricky JSON types I had to decode on a recent project, just to see how painful the custom syntax will be, and to compare it to my existing Argo implementation. Hopefully there will be time for at least one round of feedback to be integrated into this functionality.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Jon</div></div></div></blockquote><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On May 1, 2017, at 12:54 PM, Itai Ferber 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=""><span style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Hi Goffredo,</span><br class="" style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px;"><div style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px;" class=""><br class=""><blockquote type="cite" class=""><div class="">On Apr 26, 2017, at 2:00 PM, Goffredo Marocchi &lt;<a href="mailto:panajev@gmail.com" class="">panajev@gmail.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="auto" class=""><div class="">Hello Itai,</div><div class=""><br class=""></div><div class="">Sorry for the confusion, but I understood that the following</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class=""><span class="" style="background-color: rgba(255, 255, 255, 0);"><i class="">To answer your second question, the reason is that using the protocol implies that all encoders and decoders must support anything that conforms to that protocol. We’re not sure this is a reasonable requirement. Many formats do not have any kind of support for arbitrary size integers, for example. Therefore, we felt it was best to limit it to a set of concrete types.</i></span><br class=""></blockquote><div class=""><br class=""></div><div class="">meant it would actually hinder that kind of transformation or make it more difficult to write custom decoders and encoders. Sorry if I misunderstood that.</div><div class=""><br class=""></div><div class="">One follow up question: what would happen if inside the JSON mock object you posted I were to remove the 'address' key (in terms of the produced object and how to access its inner properties)?&nbsp;</div><div class=""><br class=""></div><div class="">What would happen if I remove the 'name' one or better if I add another key to the JSON object?</div></div></div></div></blockquote><div class=""><font face="Menlo" class="">Codable</font><span class="Apple-converted-space">&nbsp;</span>conformance is derived by default to require that all non-optional properties be initialized. This means that if you have a non-optional property<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">address: Address</font><span class="Apple-converted-space">&nbsp;</span>but there is no<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">address</font><span class="Apple-converted-space">&nbsp;</span>key in the JSON payload you're decoding from, it will throw an error to indicate that the key was not found.</div><div class="">On the flip side, if the JSON payload has information in it which your type does not have (e.g. if there is an<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">address</font><span class="Apple-converted-space">&nbsp;</span>in the JSON, but your<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">Person</font><span class="Apple-converted-space">&nbsp;</span>just has<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">name</font>), the extra data is ignored.</div><div class=""><br class=""></div><div class="">This, however, is just in the default, derived conformance. For more complex cases, you can always provide your own<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">init(from:)</font><span class="Apple-converted-space">&nbsp;</span>and<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">encode(to:)</font>to do custom decoding. If you have a property which may or may not be in the JSON, you can always<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">decodeIfPresent</font>, which will return<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">nil</font><span class="Apple-converted-space">&nbsp;</span>if the key or value was not found.</div><div class="">If you need to access sub-objects in the JSON data which do not map to your properties 1-to-1, e.g. your payload looks like<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">{"name": "John Doe", "address": { "street": "1 Infinite Loop", ... } }</font>, but your type looks like</div><div class=""><pre class=" language-swift" style="-webkit-print-color-adjust: exact; margin-top: 0.5em; margin-bottom: 0.5em; background-color: rgb(245, 242, 240); border: 1px solid rgb(204, 204, 204); font-size: 13px; line-height: 1.5; overflow: auto; padding: 1em; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; text-shadow: white 0px 1px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; white-space: pre-wrap; word-break: normal; word-wrap: normal; tab-size: 4; -webkit-hyphens: none;"><code class=" language-swift" style="-webkit-print-color-adjust: exact; margin: 0px; padding: 0px; border: none; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-image: none; text-shadow: white 0px 1px; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; word-spacing: normal; word-break: normal; word-wrap: normal; line-height: 1.5; tab-size: 4; -webkit-hyphens: none;"><span class="token keyword" style="-webkit-print-color-adjust: exact; color: rgb(0, 119, 170);">struct</span> <span class="token builtin" style="-webkit-print-color-adjust: exact; color: rgb(102, 153, 0);">Person</span> <span class="token punctuation" style="-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">{</span>
    <span class="token keyword" style="-webkit-print-color-adjust: exact; color: rgb(0, 119, 170);">let</span> name<span class="token punctuation" style="-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">:</span> <span class="token builtin" style="-webkit-print-color-adjust: exact; color: rgb(102, 153, 0);">String</span>
    <span class="token keyword" style="-webkit-print-color-adjust: exact; color: rgb(0, 119, 170);">let</span> street<span class="token punctuation" style="-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">:</span> <span class="token builtin" style="-webkit-print-color-adjust: exact; color: rgb(102, 153, 0);">String</span>
    <span class="token keyword" style="-webkit-print-color-adjust: exact; color: rgb(0, 119, 170);">let</span> city<span class="token punctuation" style="-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">:</span> <span class="token builtin" style="-webkit-print-color-adjust: exact; color: rgb(102, 153, 0);">String</span>
    <span class="token comment" spellcheck="true" style="-webkit-print-color-adjust: exact; color: slategray;">// ...</span>
<span class="token punctuation" style="-webkit-print-color-adjust: exact; color: rgb(153, 153, 153);">}</span></code></pre><div class="">then you can always access the nested data by requesting a<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">nestedContainer(keyedBy: ..., forKey: .address)</font><span class="Apple-converted-space">&nbsp;</span>which will return a container wrapping the<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">address</font><span class="Apple-converted-space">&nbsp;</span>sub-object, which you can then pull fields out of.</div><div class=""><br class=""></div><div class="">The derived conformance case gives a reasonable default, but you can always write your own<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">init(from:)</font><span class="Apple-converted-space">&nbsp;</span>and<span class="Apple-converted-space">&nbsp;</span><font face="Menlo" class="">encode(to:)</font><span class="Apple-converted-space">&nbsp;</span>to handle custom needs.</div></div><br class=""><blockquote type="cite" class=""><div class=""><div dir="auto" class=""><div class=""><br class="">Sent from my iPhone</div><div class=""><br class="">On 26 Apr 2017, at 21:28, Itai Ferber &lt;<a href="mailto:iferber@apple.com" class="">iferber@apple.com</a>&gt; wrote:<br class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div class="" style="font-family: sans-serif;"><div class="" style="white-space: normal;"><p dir="auto" class="">Hi Goffredo,</p><p dir="auto" class="">Unless I'm misunderstanding what you mean here, this is exactly what we're proposing with the API — anything<span class="Apple-converted-space">&nbsp;</span><code bgcolor="#F7F7F7" class="" style="background-color: rgb(247, 247, 247); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; margin: 0px; padding: 0px 0.4em;">Encodable</code><span class="Apple-converted-space">&nbsp;</span>can encode any type that is<span class="Apple-converted-space">&nbsp;</span><code bgcolor="#F7F7F7" class="" style="background-color: rgb(247, 247, 247); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; margin: 0px; padding: 0px 0.4em;">Encodable</code><span class="Apple-converted-space">&nbsp;</span>as a nested value:</p><pre bgcolor="#F7F7F7" class="" style="background-color: rgb(247, 247, 247); border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; margin-left: 15px; margin-right: 15px; max-width: 90vw; overflow-x: auto; padding: 5px;"><code bgcolor="#F7F7F7" class="" style="background-color: rgb(247, 247, 247); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; margin: 0px; padding: 0px;"><span class="" style="color: rgb(0, 136, 0); font-weight: bold;">struct</span> <span class="" style="color: rgb(187, 0, 102); font-weight: bold;">Person</span> : Codable {
    <span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">name</span>: <span class="" style="color: rgb(0, 112, 32);">String</span>
    <span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">address</span>: Address
}

<span class="" style="color: rgb(0, 136, 0); font-weight: bold;">struct</span> <span class="" style="color: rgb(187, 0, 102); font-weight: bold;">Address</span> : Codable {
    <span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">street</span>: <span class="" style="color: rgb(0, 112, 32);">String</span>
    <span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">city</span>: <span class="" style="color: rgb(0, 112, 32);">String</span>
    <span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">state</span>: <span class="" style="color: rgb(0, 112, 32);">String</span>
    <span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">zipCode</span>: <span class="" style="color: rgb(0, 112, 32);">Int</span>
    <span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">country</span>: <span class="" style="color: rgb(0, 112, 32);">String</span>
}

<span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">address</span> = Address(street: <span class="" style="background-color: rgb(255, 240, 240);">"1 Infinite Loop"</span>, city: <span class="" style="background-color: rgb(255, 240, 240);">"Cupertino"</span>, state: <span class="" style="background-color: rgb(255, 240, 240);">"CA"</span>, zipCode: <span class="" style="color: rgb(0, 0, 221); font-weight: bold;">95014</span>, country: <span class="" style="background-color: rgb(255, 240, 240);">"United States"</span>)
<span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">person</span> = Person(name: <span class="" style="background-color: rgb(255, 240, 240);">"John Doe"</span>, address: address)

<span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">encoder</span> = JSONEncoder()
<span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">payload</span> = try encoder.encode(person)
<span class="" style="color: rgb(0, 112, 32);">print</span>(<span class="" style="color: rgb(0, 112, 32);">String</span>(data: payload, encoding: .utf8)<span class="" style="color: rgb(51, 51, 51);">!</span>) <span class="" style="color: rgb(136, 136, 136);">// =&gt; {"name": "John Doe", address: {"street": "1 Infinite Loop", ... } }</span>

<span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">decoder</span> = JSONDecoder()
<span class="" style="color: rgb(0, 136, 0); font-weight: bold;">let</span> <span class="" style="color: rgb(153, 102, 51);">decoded</span> = try decoder.decode(Person.<span class="" style="color: rgb(0, 136, 0); font-weight: bold;">self</span>, from: payload) <span class="" style="color: rgb(136, 136, 136);">// =&gt; Person(name: "John Doe", address: ...)</span>
</code></pre><p dir="auto" class="">Or have I misunderstood you?</p><p dir="auto" class="">— Itai</p><p dir="auto" class="">On 26 Apr 2017, at 13:11, Goffredo Marocchi via swift-evolution wrote:</p><div class=""><br class="webkit-block-placeholder"></div></div><div class="" style="white-space: normal;"></div><blockquote class="" style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(119, 119, 119); color: rgb(119, 119, 119); margin: 0px 0px 5px; padding-left: 5px;"><div id="558C7C14-AADC-486E-8E7F-C7C0358786AC" class=""><div dir="auto" class=""><div class=""><br class=""><br class="">Sent from my iPhone</div><div class=""><br class="">On 26 Apr 2017, at 17:24, Tony Parker via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:<br class=""><br class=""></div><blockquote type="cite" class=""><div class="">Hi Riley,<br class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Apr 25, 2017, at 6:11 PM, Riley Testut 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 class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="">I’m sure this has already been discussed, but why are the methods throwing NSErrors and not Enums? If I’m remembering correctly, the original reason for this was because this was meant to be a part of Foundation. Now that this is in the Standard Library, however, it seems strange that we’re still using NSError.</div><div class=""><br class=""></div><div class="">Second question that again I’m sure was asked and answered already, but: why do we require implementations for each concrete numeric type (Int, Int8, Int16, Float, etc), instead of using protocols (such as the new Integer protocols)?</div></div></div></blockquote><div class=""><br class=""></div>To answer your second question, the reason is that using the protocol implies that all encoders and decoders must support anything that conforms to that protocol.</div></div></blockquote><div class=""><br class=""></div><div class="">Would this make it easier to transform nested JSON into a nested object/struct? If so it could be useful, very useful.</div><div class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div class="">We’re not sure this is a reasonable requirement. Many formats do not have any kind of support for arbitrary size integers, for example. Therefore, we felt it was best to limit it to a set of concrete types.</div><div class=""><br class=""></div></div></blockquote><div class=""><br class=""></div><div class="">I honk we would be missing a trick, unless I am missing something here, that was very powerful in libraries like Mantle for iOS: the ability to translate a nested JSON object (some keys in the JSON object having a JSON object as value, etc...) in an MTLModel subclass composed of other MTLModel subclasses where doing the transformation of the root object would call the right model needed to transform for the child JSON objects.</div><div class="">Working with Mantle is safe, rugged (it does not cause crashes if the JSON file changes), and allows you to break the problem into chunks and present a coherent simple view to the code that makes use of the instance you created out of the JSON input. Reference:&nbsp;<a href="https://github.com/Mantle/Mantle/blob/master/README.md" class="">https://github.com/Mantle/Mantle/blob/master/README.md</a></div><div class=""><br class=""></div><br class=""><blockquote type="cite" class=""><div class=""><div class="">We could change our minds on this before we ship Swift 4, if we feel it was the wrong decision. Now that the proposals are accepted we will be landing these branches in master soon, which means everyone has a great chance to try it out and see how it feels in real world usage before it’s final.</div><div class=""><br class=""></div><div class="">- Tony</div><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Apr 25, 2017, at 3:59 PM, Douglas Gregor 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 class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Proposal Link:&nbsp;<a href="https://github.com/apple/swift-evolution/blob/master/proposals/0166-swift-archival-serialization.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0166-swift-archival-serialization.md</a><div class=""><br class=""></div><div class="">Hello Swift Community,</div><div class=""><br class=""></div><div class="">The review of SE-0166 “Swift Archival &amp; Serialization” ran from&nbsp;April 6...12, 2017. The proposal is<span class="Apple-converted-space">&nbsp;</span><b class="">accepted</b>&nbsp;with some minor modifications. Specifically, the core protocols and types will be sunk down into the Swift standard library for more tight integration with the Swift language and compiler, and the operations specifically involving Foundation’s “Data” type will be removed. The proposal document has been updated with more detail. Thank you everyone for participating in this review!</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>- Doug</div><div class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>Review Manager</div><div class=""><br class=""></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=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class=""></div>_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class=""></div></blockquote><blockquote type="cite" class=""><div class=""><span class="">_______________________________________________</span><br class=""><span class="">swift-evolution mailing list</span><br class=""><span class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a></span><br class=""><span class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br class=""></div></blockquote></div></div></blockquote><div class="" style="white-space: normal;"><blockquote class="" style="border-left-width: 2px; border-left-style: solid; border-left-color: rgb(119, 119, 119); color: rgb(119, 119, 119); margin: 0px 0px 5px; padding-left: 5px;"></blockquote><p dir="auto" class="">_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="" style="color: rgb(57, 131, 196);">https://lists.swift.org/mailman/listinfo/swift-evolution</a></p></div><div class="" style="white-space: normal;"></div></div></div></blockquote></div></div></blockquote></div><br class="" style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px;"><span style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">swift-evolution mailing list</span><br style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a></span><br style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; 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; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span></div></blockquote></div><br class=""></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=""></div></div></blockquote>
<div style="white-space:normal">
<blockquote style="border-left:2px solid #777; color:#777; margin:0 0 5px; padding-left:5px">
</blockquote></div>
<div style="white-space:normal">
</div>
</div>
</body>
</html>