<div>Ok. I&#39;m positive with some sort of case classes.</div><div><br></div><div>+1 here</div><div><br><div class="gmail_quote"><div>On Tue, 20 Dec 2016 at 23:02 Derrick Ho via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_msg">Jeremy,<br class="gmail_msg"><br class="gmail_msg">The problem you present is not a mutability problem but rather a cache design problem.  If your hash value truly is expensive then you only want to calculated it when you need to...<br class="gmail_msg"><br class="gmail_msg">struct Person: Hashable<br class="gmail_msg">{<br class="gmail_msg">    var firstName: String {didSet { _hashValue = nil }}<br class="gmail_msg">    var lastName: String {didSet { _hashValue = nil }}<br class="gmail_msg">    private var _hashValue: Int?<br class="gmail_msg">    var hashValue: Int { <br class="gmail_msg">        if _hashValue == nil {<br class="gmail_msg">            _hashValue = firstName ^ lastName // the &quot;expensive hash calculation&quot;<br class="gmail_msg">        }<br class="gmail_msg">        return _hashValue!<br class="gmail_msg">    }<br class="gmail_msg">}<br class="gmail_msg"><br class="gmail_msg">In the above implementation the hash value would only calculate the hash when firstName or lastName were changed.<br class="gmail_msg"><br class="gmail_msg">However in your example your hash method would calculate a new one every time you copy a Person, but mine would not. </div><div class="gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div class="gmail_msg">On Tue, Dec 20, 2016 at 6:44 AM Martin Waitz via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@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">Am 2016-12-19 20:44, schrieb Erica Sadun via swift-evolution:<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">&gt; <a href="https://github.com/apple/swift-evolution/pull/346" rel="noreferrer" class="gmail_msg" target="_blank">https://github.com/apple/swift-evolution/pull/346</a><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">-1<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">I don&#39;t like where this is heading.<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">If you want to introduce method cascading, then have a look at Dart.<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">E.g. the example from the pull request could be something like this:<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">     let questionLabel = UILabel()<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">         ..textAlignment = .Center<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">         ..font = UIFont(name: &quot;DnealianManuscript&quot;, size: 72)<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">         ..text = questionText<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">The expression could still work on a mutable struct/class which later<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">becomes<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">immutable by using the `let` assignment.<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">The other example which silently creates a new instance is even worse.<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">If you want to do something like this, then please do it more<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">explicitly.<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">E.g.:<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">     let fewerFoos = foos.clone()<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">         ..remove(at: i)<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">Anyway, all of this is simply syntactic sugar and should wait...<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">--<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">Martin<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">_______________________________________________<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">swift-evolution mailing list<br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg"></blockquote></div></div><br><br>_______________________________________________<br class="gmail_msg"><br>swift-evolution mailing list<br class="gmail_msg"><br><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg"><br></blockquote></div></div>