Skip to content

Instantly share code, notes, and snippets.

@cemolcay
Created February 20, 2018 12:02
Show Gist options
  • Save cemolcay/f546a799ea09201bdae65dfbf8743cb0 to your computer and use it in GitHub Desktop.
Save cemolcay/f546a799ea09201bdae65dfbf8743cb0 to your computer and use it in GitHub Desktop.
Converts a value in a range to another range in Swift 4.0
import Foundation
func convert<T: FloatingPoint>(value: T, inRange: ClosedRange<T>, toRange: ClosedRange<T>) -> T {
let oldRange = inRange.upperBound - inRange.lowerBound
let newRange = toRange.upperBound - toRange.lowerBound
return (((value - inRange.lowerBound) * newRange) / oldRange) + toRange.lowerBound
}
func convert<T: SignedInteger>(value: T, inRange: ClosedRange<T>, toRange: ClosedRange<T>) -> T {
let oldRange = inRange.upperBound - inRange.lowerBound
let newRange = toRange.upperBound - toRange.lowerBound
return (((value - inRange.lowerBound) * newRange) / oldRange) + toRange.lowerBound
}
func convert<T: FloatingPoint>(value: T, inRange: Range<T>, toRange: Range<T>) -> T {
let oldRange = inRange.upperBound - inRange.lowerBound
let newRange = toRange.upperBound - toRange.lowerBound
return (((value - inRange.lowerBound) * newRange) / oldRange) + toRange.lowerBound
}
func convert<T: SignedInteger>(value: T, inRange: Range<T>, toRange: Range<T>) -> T {
let oldRange = inRange.upperBound - inRange.lowerBound
let newRange = toRange.upperBound - toRange.lowerBound
return (((value - inRange.lowerBound) * newRange) / oldRange) + toRange.lowerBound
}
convert(value: 200.0, inRange: 0.0..<200.0, toRange: 0.0..<5.0)
convert(value: 200.0, inRange: 0.0...200.0, toRange: 0.0...5.0)
convert(value: 200, inRange: 0..<200, toRange: 0..<5)
convert(value: 200, inRange: 0...200, toRange: 0...5)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment