Мое предложение также основано на регулярном выражении, но есть более удобный способ получить NSRange
из Range<String.Index>
let myStr = "I have 4.34 apples."
if let range = myStr.range(of: "\\d+\\.\\d+", options: .regularExpression) {
let nsRange = NSRange(range, in: myStr)
print(nsRange)
}
Если вы хотите определить целочисленные значения и значения с плавающей запятой, используйте шаблон
"\\d+(\\.\\d+)?"
Скобки и завершающий вопросительный знак указывают на то, что десятичная точка и дробные цифры являются необязательными.