how to convert a date string into a NSDate type swift

tha*_*ker 5 nsdate ios swift

我正在尝试采用dd/mm/yyyy格式的字符串并将其转换为 NSDate,以便我可以存储生日。日、月、年经过验证是真实日期(也不是将来的日期),因此我知道它们是正确的。它们由用户作为文本字段输入,我想我可以制作dateString我想要的任何有用的格式。

let day = dayTextField.text
let month = monthTextField.text
let year = yearTextField.text
let dateString = "\(day)/\(month)/\(year)"
let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "dd/MM/yyyy"

let birthdate: NSDate = dateFormatter.date(from: dateString) as NSDate
Run Code Online (Sandbox Code Playgroud)

我的问题是当我尝试将日期字符串转换为 NSDate 时,最后一行出现以下错误:

'Date?' is not convertible to 'NSDate'; did you mean to use 'as!' to force downcast?
Run Code Online (Sandbox Code Playgroud)

我可以在“(from:) dateString”之后强制强制转换,但我认为这不是正确的做法。

您能提供的任何帮助和见解将不胜感激!谢谢

Swe*_*per 2

如果您让用户从 中选择日期,那么对您和用户来说都会更容易UIDatePicker。这有很多优点:

  • 用户不必输入三个文本字段
  • 您可以通过酒店获取所选日期date。你不需要所有这些格式化程序之类的东西
  • 您可以设置用户可以通过该maximumDate属性选择的最大日期。这样您就不必手动检查它是否在将来。就设置maximumDate到现在吧。
  • 日期选择器将根据用户的区域设置使用不同的格式。你根本不需要担心它。

只需记住将其设置datePickerMode.date

至于转换为NSDate,您可以通过以下表达式轻松完成:

datePicker.date as NSDate
Run Code Online (Sandbox Code Playgroud)

如果您坚持使用三个文本字段,您可以这样做:

dateFormatter.date(from: dateString) as NSDate? // note that this produces an optional
Run Code Online (Sandbox Code Playgroud)