<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>I strongly recommend either making the context get explicitly used in the subsequent animations (e.g. `context.animation(...)` instead of just `animation(...)`) or giving it an explicit scope (e.g. `withAnimationContext(speed: 1.0, bounciness: 1.0) { ... }`). Having the presence of a stack value influence behavior is a great way to cause maintenance issues later on.<br></div>
<div>&nbsp;</div>
<div>-Kevin Ballard</div>
<div>&nbsp;</div>
<div>On Wed, Dec 30, 2015, at 10:10 AM, Ollie Wagner via swift-evolution wrote:<br></div>
<blockquote type="cite"><div>I'm using the lifetime of a variable to push and pop a context in an animation system that I'm writing. I'm interested in using a pattern like:<br></div>
<div>&nbsp;</div>
<div><span class="font" style="font-family:Menlo">func doAnimations() {</span><br></div>
<div><span class="font" style="font-family:Menlo">&nbsp; &nbsp; AnimationContext(speed: 1.0, bounciness: 1.0)</span><br></div>
<div><span class="font" style="font-family:Menlo">&nbsp; &nbsp; // do some animations using these options</span><br></div>
<div><span class="font" style="font-family:Menlo">}</span><br></div>
<div>&nbsp;</div>
<div>But today, the value returned by <span class="font" style="font-family:Menlo">AnimationContext(speed:bounciness:)</span> gets deinitted immediately.<br></div>
<div>&nbsp;</div>
<div>I've come to desire using such a pattern after living with this for a while:<br></div>
<div>&nbsp;</div>
<div><span class="font" style="font-family:Menlo">AnimationContext(speed: 1.0, bounciness: 1.0) {</span><br></div>
<div><span class="font" style="font-family:Menlo">&nbsp; &nbsp;&nbsp;// do some animations using these options<span style="white-space:pre;"></span></span><br></div>
<div><span class="font" style="font-family:Menlo">}</span><br></div>
<div>&nbsp;</div>
<div>But I don't like it because it contributes heavily to rightward drift (a user of this API might want to change the options multiple times), and gets hard to parse when nested in the many other language constructs that create a scope using brackets.<br></div>
<div>&nbsp;</div>
<div>So — would it be reasonable to suggest that we have some keyword(s) preceeding an initializer that allows a value to stay alive and/or not warn if it winds up going unused? The current behavior in Swift has obviously been considered, so please feel free to tell me if this is a Very Bad Idea. I'm still learning!<br></div>
<div>&nbsp;</div>
<div>- Ollie<br></div>
<div><img style="height:1px !important;width:1px !important;border-top-width:0px !important;border-right-width:0px !important;border-bottom-width:0px !important;border-left-width:0px !important;margin-top:0px !important;margin-bottom:0px !important;margin-right:0px !important;margin-left:0px !important;padding-top:0px !important;padding-bottom:0px !important;padding-right:0px !important;padding-left:0px !important;" border="0" height="1" width="1" alt="" src="https://www.fastmailusercontent.com/proxy/b29cb67746ef1a8a90140bfcd35c5140d8485a7cf1d9a3e60d215eb45e604e6a/8647470737a3f2f25723030323431303e23647e23756e64676279646e2e65647f27766f2f60756e6f35707e6d3148765176786c673171614a7d2236454230345272776e436454637668357c675248374a57415051654f6271547849307a487a69426b453d6a7973665c47374151326051656839415644523652316a4e436c444a796c6f627a464749576b6577794a503a7d2232446452415b4734524131534d22364a6f6376613678503a6f4663326b616e6942653a6871576677797979674256535b4b6266414275327144735e4c6839685e6932627a4676723f6f65454e67545d22324564593f607f4965733946327d223249575a473874374a79654b444c42754a685652314668667076415d23344d23344/open"><br></div>
<div><u>_______________________________________________</u><br></div>
<div>swift-evolution mailing list<br></div>
<div><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br></div>
<div><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br></div>
</blockquote><div>&nbsp;</div>
</body>
</html>