[swift-evolution] Proposal: Add replace(_:with:) function to the stdlib

Kevin Ballard kevin at sb.org
Sun Jan 10 15:33:12 CST 2016


Neither code snippet appears to be doing much at all. It's hard to judge
anything at all when the code has been reduced that far.

-Kevin Ballard

On Sat, Jan 9, 2016, at 09:53 PM, 肇鑫 wrote:
> 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/56bc8b57/attachment.html>


More information about the swift-evolution mailing list