What I still have difficulties understanding is what will be the semantic 
difference between decodeIfPresent and decode with optional type:

func init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    prop1 = try container.decodeIfPresent(Prop1Type.self, forKey: .prop1)
    prop2 = try container.decode(Optional<Prop2Type>.self, forKey: .prop2)
}

> On 26 Jun 2017, at 19:10, Itai Ferber <[email protected]> wrote:
> 
> Reply-all this time too. :)
> Thanks for the feedback, David!
> 
> encodeIfPresent and decodeIfPresent are not strictly necessary, but they’re 
> useful for further cutting down boilerplate. encodeIfPresent is equivalent to
> 
> if let value = value {
>     try container.encode(value, forKey: .someKey)
> }
> and decodeIfPresent is equivalent to
> 
> if container.contains(.someKey) {
>     value = try container.decode(Value.self, forKey: .someKey)
> } else {
>     value = nil
> }
> They’re not big, but when you have a long list of optional properties, it’s 
> much easier to read and comprehend than staring at a wall of Optional 
> wrapping/unwrapping:
> 
> func init(from decoder: Decoder) throws {
>     let container = try decoder.container(keyedBy: CodingKeys.self)
> 
>     if container.contains(.prop1) {
>         prop1 = try container.decode(Prop1Type.self, forKey: .prop1)
>     } else {
>         prop1 = nil
>     }
> 
>     if container.contains(.prop2) {
>         prop2 = try container.decode(Prop2Type.self, forKey: .prop2)
>     } else {
>         prop2 = nil
>     }
> 
>     if container.contains(.prop3) {
>         prop3 = try container.decode(Prop3Type.self, forKey: .prop3)
>     } else {
>         prop3 = nil
>     }
> }
> 
> // vs.
> 
> func init(from decoder: Decoder) throws {
>     let container = try decoder.container(keyedBy: CodingKeys.self)
>     prop1 = try container.decodeIfPresent(Prop1Type.self, forKey: .prop1)
>     prop2 = try container.decodeIfPresent(Prop2Type.self, forKey: .prop2)
>     prop3 = try container.decodeIfPresent(Prop3Type.self, forKey: .prop3)
> }
> On 23 Jun 2017, at 13:52, David Hart wrote:
> 
> There are a lot of great changes here which make sense after the fact. I'll 
> try to play around with them.
> 
> One thing I'm concerned about: with the new Optional conformance, why do we 
> still need decodeIfPresent and encodeIfPresent? They seem superfluous now, 
> and potentially confusing. Should users call encodeIfPresent/decodeIfPresent 
> or encode/decode with an optional type? Do the have the same semantics?
> 
> On 23 Jun 2017, at 21:47, Itai Ferber via swift-evolution 
> <[email protected] <mailto:[email protected]>> wrote:
> 
>> Hi swift-evolution,
>> 
>> Over the course of the past few weeks, we’ve been gathering feedback about 
>> the outcome of SE-0166 
>> <https://github.com/apple/swift-evolution/blob/master/proposals/0166-swift-archival-serialization.md>
>>  and SE-0167 
>> <https://github.com/apple/swift-evolution/blob/master/proposals/0167-swift-encoders.md>
>>  (both internally and externally), and we gathered a collection of updates 
>> that we’re going to introduce to the proposals and to the implementation.
>> 
>> Attached is rendered HTML (I don’t want to make your mail clients unusable 
>> like last time!) that lays out what we’d like to do. We’re not looking to do 
>> a full review of these changes, but if you have feedback or questions, we’re 
>> happy to get responses here.
>> 
>> Please note that some of these features have already been implemented (the 
>> new error types, some of the optionality changes, collection conformances, 
>> etc.), but we are receptive to comments on all of it. The existing proposals 
>> will also be updated to incorporate these updates.
>> 
>> Thanks for all of your feedback!
>> 
>> — Itai
>> 
>> <swift-archival-serialization-updates.html>
>> _______________________________________________
>> swift-evolution mailing list
>> [email protected] <mailto:[email protected]>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
>> On Jun 24, 2017, at 1:29 AM, David Hart <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Sending out again to the whole mailing list ;-)
>> 
>> There are a lot of great changes here which make sense after the fact. I'll 
>> try to play around with them.
>> 
>> One thing I'm concerned about: with the new Optional conformance, why do we 
>> still need decodeIfPresent and encodeIfPresent? They seem superfluous now, 
>> and potentially confusing. Should users call encodeIfPresent/decodeIfPresent 
>> or encode/decode with an optional type? Do the have the same semantics?
>> 
>> On 23 Jun 2017, at 21:47, Itai Ferber via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>>> Hi swift-evolution,
>>> 
>>> Over the course of the past few weeks, we’ve been gathering feedback about 
>>> the outcome of SE-0166 
>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0166-swift-archival-serialization.md>
>>>  and SE-0167 
>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0167-swift-encoders.md>
>>>  (both internally and externally), and we gathered a collection of updates 
>>> that we’re going to introduce to the proposals and to the implementation.
>>> 
>>> Attached is rendered HTML (I don’t want to make your mail clients unusable 
>>> like last time!) that lays out what we’d like to do. We’re not looking to 
>>> do a full review of these changes, but if you have feedback or questions, 
>>> we’re happy to get responses here.
>>> 
>>> Please note that some of these features have already been implemented (the 
>>> new error types, some of the optionality changes, collection conformances, 
>>> etc.), but we are receptive to comments on all of it. The existing 
>>> proposals will also be updated to incorporate these updates.
>>> 
>>> Thanks for all of your feedback!
>>> 
>>> — Itai
>>> 
>>> <swift-archival-serialization-updates.html>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> [email protected] <mailto:[email protected]>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to