[swift-users] How to be DRY on ranges and closed ranges?

Jean-Denis Muys jdmuys at gmail.com
Wed Oct 12 05:21:19 CDT 2016


Hi,

I defined this:

func random(from r: Range<Int>) -> Int {
    let from = r.lowerBound
    let to =  r.upperBound
    
    let rnd = arc4random_uniform(UInt32(to-from))
    return from + Int(rnd)
}

so that I can do:

let testRandomValue = random(from: 4..<8)

But this will not let me do:

let otherTestRandomValue = random(from: 4...10)

The error message is a bit cryptic:

“No ‘…’ candidate produce the expected contextual result type ‘Range<Int>’”

What is happening is that 4…10 is not a Range, but a ClosedRange.

Of course I can overload my function above to add a version that takes a ClosedRange.

But this is not very DRY.

What would be a more idiomatic way?

Thanks,

Jean-Denis

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161012/d2c55d12/attachment.html>


More information about the swift-users mailing list