как преобразовать строку даты в тип swift NSDate - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь взять строку в формате дд / мм / гггг и преобразовать ее в 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

Моя проблема с последней строкой, когда я пытаюсь преобразовать строку даты в NSDate, я получаю следующую ошибку:

'Date?' is not convertible to 'NSDate'; did you mean to use 'as!' to force downcast?

Я мог бы принудительно разыграть после "(от: dateString)", но я не думал, что это будет правильным решением.

Буду очень признателен за любую помощь и понимание, которые вы можете предоставить! Спасибо

Ответы [ 2 ]

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

И вам, и пользователю намного проще, если вы позволите пользователю выбрать дату из UIDatePicker. Это имеет много преимуществ:

  • Пользователь не должен вводить три текстовых поля
  • Вы можете получить выбранную дату через свойство date. Вам не нужны все эти форматеры и прочее
  • Вы можете установить максимальную дату, которую пользователь может выбрать через свойство maximumDate. Таким образом, вам не нужно проверять, будет ли это в будущем вручную. Просто установите maximumDate на сейчас.
  • Средство выбора даты будет использовать разные форматы в зависимости от локали пользователя. Вам вообще не нужно об этом беспокоиться.

Просто не забудьте установить datePickerMode на .date!

Что касается преобразования в NSDate, вы можете легко сделать это с помощью следующего выражения:

datePicker.date as NSDate

Если вы настаиваете на использовании трех текстовых полей, вы можете сделать это:

dateFormatter.date(from: dateString) as NSDate? // note that this produces an optional
0 голосов
/ 13 сентября 2018

ваш код работает нормально, поэтому проверьте значение в текстовом поле, которое входит в переменную ur или нет

  let day = "10"
    let month = "12"
    let year = "2018"
    let dateString = "\(day)/\(month)/\(year)"
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd/MM/yyyy"
    let birthdate: NSDate = dateFormatter.date(from: dateString) as! NSDate
    print(birthdate)

, но я бы посоветовал вам использовать Date вместо NSDate.

...