[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