<div dir="ltr"><div>// Swift 4, Xcode 9 beta 1, default toolchain</div><div><br></div><div>import Foundation</div><div><br></div><div>var d1 = [Int : String]()</div><div>d1[1, default: .init()].append(&quot;a&quot;)</div><div>d1[2, default: .init()].append(&quot;b&quot;)</div><div>d1[3, default: .init()].append(&quot;c&quot;)</div><div>d1[1, default: .init()].append(&quot;d&quot;)</div><div>print(d1) // [2: &quot;b&quot;, 3: &quot;c&quot;, 1: &quot;ad&quot;] as expected.</div><div><br></div><div>var d2 = [Int : NSMutableString]()</div><div>d2[1, default: .init()].append(&quot;a&quot;)</div><div>d2[2, default: .init()].append(&quot;b&quot;)</div><div>d2[3, default: .init()].append(&quot;c&quot;)</div><div>d2[1, default: .init()].append(&quot;d&quot;)</div><div>print(d2) // [:] but why?</div><div><br></div><div>I know that NSMutableString is a reference type and String is a value type and that the default argument is an @autoclosure. I also know that the newly created NSMutableString instance is just released immediately after the append call, without being stored and retained in the Dictionary&#39;s storage.</div><div><br></div><div>Is this the intended behavior and if so, please let me better understand how/why.</div><div><br></div><div>/Jens</div><div><br></div></div>