Преобразование UnitVolume.metricCups в дробь в Swift 4 - PullRequest
0 голосов
/ 02 июня 2018

Можно ли преобразовать формат, который получается из converted(to: UnitVolume.metricCups), в дробь, чтобы ответ читался так же, как если бы вы сказали, например, из кулинарной книги и т. Д.

Пример после завершения преобразования я получаюответ 1.5 metric cups, но я бы хотел видеть его как 1 1/2 или сказать 0.333 как 1/3 cup.

Документация Swift на самом деле не упоминает никаких шагов для этого, о которых я знаю.Спасибо.

Вот как выглядит раскадровка:

UI in Storyboard

let millimeters = Measurement(value: waterResult, unit: UnitVolume.milliliters)
let resultWaterConversion = millimeters.converted(to:UnitVolume.metricCups)
cupsWater.text = "\(resultWaterConversion)"

1 Ответ

0 голосов
/ 12 июня 2018

Я смог решить свою проблему, используя переключатель и небольшую модификацию со строковыми значениями, например, "3/4", чтобы получить именно то, что мне нужно.

Вот код, который я использовал:

`// MARK:- Conversion to display rice amount in the correct format for readability
    let resultRiceInteger = Int(resultRiceConversion.value)
    let resultRiceFraction = Int(100 * (resultRiceConversion.value - Double(resultRiceInteger))) // To avoid bad effects due to Double

    var decimalTextR = ""
    switch resultRiceFraction {
    case 0...9 : decimalTextR = "" // Now, approximate
    case 10 : decimalTextR = "1/10"  // First when we are very close to real fraction
    case 11 : decimalTextR = "1/9"
    case 12...13 : decimalTextR = "1/8"
    case 14...15 : decimalTextR = "1/7"
    case 16...18 : decimalTextR = "1/6"
    case 19...22 : decimalTextR = "1/5"
    case 23...29 : decimalTextR = "1/4"
    case 30...40 : decimalTextR = "1/3"
    case 41...60 : decimalTextR = "1/2"
    case 61...72 : decimalTextR = "2/3"
    case 73...79 : decimalTextR = "3/4"
    case 90...110 : decimalTextR = "1"
    default : decimalTextR = ""
    }

    cupsWater.text = "\(resultRiceInteger) and \(decimalTextR)" // UILabel displayed on my stored board.

    let cupsRiceText = resultRiceConversion.value > 1 ? "cups" : "cup"
    if resultRiceInteger > 0 {
        cupsRice.text = "\(resultRiceInteger) \(decimalTextR) \(cupsRiceText)" // UILabel displayed on my stored board.
    } else {
        cupsRice.text = "\(decimalTextR) \(cupsRiceText)"
    }`
...