Простое условие проверки на основе 3 значений - PullRequest
0 голосов
/ 22 сентября 2018

Мой пользователь должен дать мне 3 значения: день, час и минута, и максимальное значение для каждого из них ниже

let dayMaxValue = 7
let hourMaxValue = 23
let minuteMaxValue = 59

и должно быть не менее 5 в минуту, если день и часоба равны 0. Например, пользователь может отправить мне

input(day: 1, hour: 1, minute: 0)
// Or
input(day: 0, hour: 0, minute: 5)
// But not
input(day: 0, hour: 0, minute: 3)

Теперь я хочу проверить введенные пользователем данные и проверить, действительны ли они

func checkUserInput(day: Int, hour: Int, minute: Int) -> String {
    var result = [String]()

        if day > 0 {
            result.append("day")
        }

        if hour > 0 {
            result.append("hr")
        }

        if minute >= 5 {
            result.append("min")
        }

        if result.isEmpty {
            return ""
        }
    }
}

, тогда я проверяю, если checkUserInput (day:х, час: х, минута: х) .isEmpty.Если это так, ввод пользователя недействителен, иначе действителен.У вас есть простое решение, чем мое в этом случае, потому что я думаю, что мое не является хорошим способом?Благодаря.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Простое решение, которое возвращает Bool и проверяет диапазоны компонентов даты

let dayMaxValue = 7
let hourMaxValue = 23
let minuteMaxValue = 59

func checkUserInput(day: Int, hour: Int, minute: Int) -> Bool {
    return 0...dayMaxValue ~= day
        && 0...hourMaxValue ~= hour
        && ((hour + day == 0) ? 5 : 0)...minuteMaxValue ~= minute
}

checkUserInput(day: 1, hour: 1, minute: 0) // true
checkUserInput(day: 0, hour: 0, minute: 5) // true
checkUserInput(day: 0, hour: 0, minute: 3) // false
0 голосов
/ 22 сентября 2018

Там нет реального ярлыка.Проверьте каждое условие.Поскольку вам не нужна строка, просто используйте Bool, чтобы указать успех или неудачу.

func checkUserInput(day: Int, hour: Int, minute: Int) -> Bool {
    // First make sure all are in range
    guard day >= 0 && day <= dayMaxValue &&
          hour >= 0 && hour <= hourMaxValue &&
          minute >= 0 && minute <= minuteMaxValue
          else { return false }

    // Now check minute if hour and day are 0
    if day == 0 && hour == 0 && minute < 5 {
        return false
    }

    // If we get this far then it's valid
    return true
}

Существует множество способов написания приведенного выше кода.Читаемость и отлаживаемость лучше, чем втиснуть все в одну «причудливую» строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...