根据3个值简单验证条件

时间:2018-09-21 21:09:11

标签: swift validation

我的用户必须给我提供3个值:日,小时和分钟,并且每个值的最大值都在下面

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

如果日期和小时均为0,则分钟数至少应为5。例如,用户可以向我发送邮件

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:x,hour:x,minutes:x).isEmpty。如果是这样,则用户输入无效,否则有效。在这种情况下,您是否有比我简单的解决方案,因为我认为这不是一个好方法?谢谢。

2 个答案:

答案 0 :(得分:0)

没有真正的捷径。检查每个条件。由于不需要字符串,只需使用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
}

有很多方法可以编写上述代码。可读性和可调试性比将它们全部塞进一条“花哨的”行中更好。

答案 1 :(得分:0)

返回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