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. -Dave Sweeris _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
Re: [swift-evolution] Property Selectors
David Sweeris via swift-evolution Tue, 14 Mar 2017 01:43:52 -0700
- [swift-evolution] Property Selecto... Andrew Thompson via swift-evolution
- Re: [swift-evolution] Propert... David Sweeris via swift-evolution
- Re: [swift-evolution] Pro... Jaden Geller via swift-evolution
- Re: [swift-evolution]... David Sweeris via swift-evolution
- Re: [swift-evolution] Propert... Robert Widmann via swift-evolution
- Re: [swift-evolution] Pro... Nicholas Maccharoli via swift-evolution
- Re: [swift-evolution] Propert... Joe Groff via swift-evolution
- Re: [swift-evolution] Pro... Andrew Thompson via swift-evolution
- Re: [swift-evolution]... Joe Groff via swift-evolution
