rmaddy's ответ идеален. Вот как я думал об использовании Calendar
для проверки. Возможно, я написал это более сложным способом.
enum ExpiryValidation {
case valid, invalidInput, expired
}
func validateCreditCardExpiry(_ input: String) -> ExpiryValidation {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/yyyy"
guard let enteredDate = dateFormatter.date(from: input) else {
return .invalidInput
}
let calendar = Calendar.current
let components = Set([Calendar.Component.month, Calendar.Component.year])
let currentDateComponents = calendar.dateComponents(components, from: Date())
let enteredDateComponents = calendar.dateComponents(components, from: enteredDate)
guard let eMonth = enteredDateComponents.month, let eYear = enteredDateComponents.year, let cMonth = currentDateComponents.month, let cYear = currentDateComponents.year, eMonth >= cMonth, eYear >= cYear else {
return .expired
}
return .valid
}
let invalidInput = validateCreditCardExpiry("hello")
let validInput = validateCreditCardExpiry("09/2020")
let expiredInput = validateCreditCardExpiry("04/2010")