我的用户必须给我提供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。如果是这样,则用户输入无效,否则有效。在这种情况下,您是否有比我简单的解决方案,因为我认为这不是一个好方法?谢谢。
答案 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