2015-06-30 2 views
-2

Привет Я пытаюсь добавить дни к текущей дате, используя dateByAddingTimeInterval. Она не показывает какие-либо ошибки, но сбои приложения, когда я отправить форму:Проблема с dateByAddingTimeInterval

var newDate = NSDate() 
     var dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "dd MMM, yyyy" 
     var interval: Double! 

     if self.unit == "D" { 
      var aTime = Double(loadTime.toInt()!) * 24 * 60 * 60 
      var interval = NSTimeInterval(aTime) 
     } else if self.unit == "H" { 
      var aTime = Double(loadTime.toInt()!) * 60 * 60 
      var interval = NSTimeInterval(aTime) 
     } 

     var EndDate = newDate.dateByAddingTimeInterval(interval) 
     var EndDateStr = dateFormatter.stringFromDate(EndDate) 
     product["loadEndDate"] = EndDateStr 

Навигатор Debug показывает ошибку с этой строкой: вар EndDate = newDate.dateByAddingTimeInterval (интервал)

Может кто-нибудь пожалуйста

расскажите, где я делаю неправильно? Я прошел через многие онлайн-службы, но не нашел ничего, что могло бы помочь в моем случае.

Спасибо заранее,

ответ

0

каждый var ключевое слово создает новую переменную, вы создаете новые переменные интервал в, если - другое выражение с областью между фигурными скобками. Первый интервал переменной, которая затем используется ноль

Улучшение синтаксиса

var newDate = NSDate() 
    var dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd MMM, yyyy" 
    let interval: NSTimeInterval // let and not optional 

    if self.unit == "D" { 
     interval = NSTimeInterval(loadTime.toInt()! * 24 * 60 * 60) 
    } else if self.unit == "H" { 
     interval = NSTimeInterval(loadTime.toInt()! * 60 * 60) 
    } 

    var endDate = newDate.dateByAddingTimeInterval(interval) 
    var endDateStr = dateFormatter.stringFromDate(endDate) 
    product["loadEndDate"] = endDateStr 
+0

Спасибо, и действительно жаль тех глупых ошибок, которые я проглядел в спешке. Я смущен вашим решением: вы определили: пусть интервал: NSTimeInterval. Однако вы снова назначили ему новое значение внутри оператора if. И каково должно быть начальное значение «интервала», поскольку оно определяется в глобальной области. – Guru

+0

оператор 'let' разрешен, если переменная гарантированно будет инициализирована всегда один раз (в одной из ветвей if-else). Затем переменная может быть объявлена ​​как необязательная, что делает код более безопасным по типу – vadian

0

Это один работал:

var newDate = NSDate() 
    var dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "dd MMM, yyyy" 
    var interval: Double! = 0.0 

    if self.unit == "D" { 
     var aTime = Double(loadTime.toInt()!) * 24 * 60 * 60 
     interval = NSTimeInterval(aTime) 
    } else if self.unit == "H" { 
     var aTime = Double(loadTime.toInt()!) * 60 * 60 
     interval = NSTimeInterval(aTime) 
    } 

    var EndDate = newDate.dateByAddingTimeInterval(interval) 
    var EndDateStr = dateFormatter.stringFromDate(EndDate) 
    product["loadEndDate"] = EndDateStr 

Все, что я сделал, я снял «Var» из «вар интервала» изнутри цикла if (это смехотворно глупо: P) и дал начальное значение переменной интервала. Но я думаю, что это был «вар», который испортился.

Еще раз спасибо,

+0

Каждый разработчик, который использует 86.400 секунд для представления дня, заслуживает головной боли, он вызовет один день. – vikingosegundo

+0

@vikingosegundo Спасибо за ваш комментарий, не могли бы вы рассказать, что вы говорите? Не уверен, почему секунды могут вызвать проблему, так как это самая минутная единица для обработки даты и времени? – Guru

+0

Слышали о летнем времени? – vikingosegundo

1
let today = NSDate() 
let tommorrow = NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitDay, value: 1, toDate: today, options: nil) 
Смежные вопросы