[swift-evolution] Proposal: Add replace(_:with:) function to the stdlib
肇鑫
owenzx at gmail.com
Sat Jan 9 23:53:21 CST 2016
what is the code
*var a = 1*
*var b = -1*
*var c = replace(&a, with: b*)
different from
*var a = 1*
*var b = -1*
*var c = a*
*a = b*
?
For me, the latter is more clearer.
On Sun, Jan 10, 2016 at 8:48 AM, Kevin Ballard via swift-evolution <
swift-evolution at swift.org> wrote:
> Proposal PR submitted as https://github.com/apple/swift-evolution/pull/93
>
> -Kevin Ballard
>
> On Sun, Dec 13, 2015, at 02:21 PM, Kevin Ballard wrote:
>
> A function I find myself defining in a lot of my projects looks like the
> following:
>
> /// Replace the value of `a` with `b` and return the old value.
> public func replace<T>(inout a: T, with b: T) -> T {
> var value = b
> swap(&a, &value)
> return value
> }
>
> This is a pretty simple function, and useful in a wide variety of
> circumstances, so I'd love to get it into the standard library. It doesn't
> actually enable any behavior that wasn't previously possible, but it does
> shrink some common code patterns, and I find the shorter code easier to
> read.
>
> An example of a place where I use it often is in replacing an optional
> property with a new value (or with nil) and cleaning up the previous value.
> Assuming a property like
>
> var task: NSURLSessionTask?
>
> This replaces
>
> if let task = self.task {
> task.cancel()
> }
> task = nil
>
> with
>
> replace(&task, with: nil)?.cancel()
>
> Or sometimes I use it like
>
> if let value = replace(&prop, with: newValue) {
> // multi-line cleanup
> }
>
> This is particularly nice if it's a COW value that I want to mutate, as it
> means I don't have to worry about getting unwanted copies due to the
> property still holding the old value while I muck with it.
>
> Question: For trivial backwards-compatible API changes like this, does a
> proposal PR need to be submitted to the swift-evolution repo, or is
> discussion on this ML sufficient before submitting a patch?
>
> -Kevin Ballard
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
--
Owen Zhao
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160110/bc7b13b8/attachment.html>
More information about the swift-evolution
mailing list