Ah, yes! That whole sleep thing really does help. Sent from my iPhone
> On Mar 14, 2017, at 03:51, [email protected] wrote: > > > >> On Mar 14, 2017, at 1:42 AM, David Sweeris via swift-evolution >> <[email protected]> wrote: >> >> >> >> >> Sent from my iPhone >>> On Mar 14, 2017, at 01:02, Andrew Thompson via swift-evolution >>> <[email protected]> wrote: >>> >>> Hello Swift Evolution Community, >>> >>> I’ve been thinking about a new language feature that would allow properties >>> to be first class citizens. The basic idea is as follows: >>> >>> let x: PropertySelector<UIView, CGFloat> = #property(UIView.frame.origin.x) >>> let view: UIView = … >>> view.frame.origin.x = 20 >>> x.read(view) // returns 20 >>> x.write(view, value: 9091) >>> view.frame.origin.x // now 9091 >>> >>> This is a trivial example, but now we can do more interesting things in our >>> code. For example, we can animate any property on a view (that is >>> documented to be animatable of course): >>> >>> func animate(view: UIView, property: PropertySelector<UIView, CGFloat>, >>> amount: Int) { >>> let originalValue = property.read(view) >>> func generateKeyFrames() { >>> let step = 1.0 / Double(amount) >>> for i in 0..<amount { >>> let newValue = originalValue + CGFloat(i) >>> let time = Double(i) / Double(amount) >>> UIView.addKeyframe(withRelativeStartTime: time, >>> relativeDuration: step, >>> animations: { property.write(view, value: >>> newValue) } >>> ) >>> } >>> } >>> >>> UIView.animateKeyframes(withDuration: 1.0, >>> delay: 0, >>> options: [], >>> animations: generateKeyFrames, >>> completion: nil) >>> } >>> >>> let myView: UIView = … >>> myView.frame = CGRect(x: 20, y: 100, width: 99, height: 120) >>> >>> // once this completes, myView.frame.origin.x == 120 >>> animate(view: myView, property: #property(UIView.frame.origin.x), amount: >>> 100) >>> >>> // once this completes, myView.frame.size.width == 198 >>> animate(view: myView, property: #property(UIView.frame.size.width), >>> amount: 99) >>> >>> I think this would be a pretty neat feature to have, what do you think? >> >> I think you can already do that with `UnsafeMutablePointer`. I think. I'm >> really tired, so maybe if I look at it again in the morning I'll immediately >> see a difference. Apart from the syntax, of course, which is nice. > > You definitely shouldn't try to replicate this with a pointer. At least one > place that will break down is computed properties (as well as `didSet` and > friends), but I imagine there are more. Also, this sort of operation should > not require dropping down to an unsafe construct! > > It's worth noting this is sort of equivalent to defining a type that stores > functions that, given a type, will get or set a certain property. It would > need to be initialized with 2 lambdas though. > >> >> -Dave Sweeris >> >> _______________________________________________ >> swift-evolution mailing list >> [email protected] >> https://lists.swift.org/mailman/listinfo/swift-evolution _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
