在NSDateFormatter函数中找到nil

时间:2016-06-01 17:43:49

标签: ios swift nsdate nsdateformatter

所以我的代码所做的是从UIDaterPicker(timePicker)获取NSDate并更改时区。之后,它将转换回NSDate以启动NSTimer。

但是它在convertToDate函数中崩溃了。显然,似乎我试图强行打开一个可选项。但为什么它是可选的?

    @IBOutlet weak var timePicker: UIDatePicker!

        func convertTime() -> String {
            let date = timePicker.date
            print("date", date)
            let myTimeZone = NSTimeZone.localTimeZone()
            let df = NSDateFormatter()
            df.timeZone = myTimeZone
            df.dateFormat = "yyyy.MM.dd G 'at' HH:mm:ss zzz"
            let time = df.stringFromDate(date)

            return time
        }

        func convertToDate() -> NSDate {
            let date = convertTime()
            let dateformatter = NSDateFormatter()
            let convertedTime = dateformatter.dateFromString(date)

            return convertedTime!
        }

func fireTime() -> NSDate {
        let time = convertToDate().dateByAddingTimeInterval(60*60*2.4)
        return time
    }

    func updateTimeLeft() {
        let elapsedTime = fireTime().timeIntervalSinceDate(NSDate())
        self.ringTime.text = NSDateComponentsFormatter().stringFromTimeInterval(elapsedTime)
    }

timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: #selector(ViewController.updateTimeLeft), userInfo: nil, repeats: true)

1 个答案:

答案 0 :(得分:1)

NSDateFormatter返回一个可选项,因为并非每个字符串都代表一个有效的日期。可选性允许它优雅地回答“根据您告诉我使用的格式,这不是有效数据”。

    func convertToDate() -> NSDate {
        let date = convertTime()
        let dateformatter = NSDateFormatter()
        dateformatter .dateFormat = "INSERT DATE FORMAT HERE"

        if let convertedTime = dateformatter.dateFromString(date) {
            return convertedTime
        }
        else {
            //formatting failed. Handle the error here
        }
    }

您还没有给它使用格式字符串,因此它不知道如何解析您的日期,因此它返回nil。

如果您发布数据示例,我会向您显示所需的格式字符串。