2015-07-31 2 views
0

У меня есть класс под названием Trip, у которого есть свойство NSDate, которое называется date. Я хочу убедиться, что свойство date всегда имеет значение времени, установленное в начале дня. Я делаю это:Использование настраиваемого setter/getter и инициализация недвижимости для быстрой даты

  1. Созданием NSCalendar константы с именем calendar, так что я могу использовать метод startOfDayForDate для сброса значения даты.
  2. Создание настраиваемого метода настройки для свойства date, вызывающего метод startOfDayForDate.

Однако, я хочу инициализировать свойство date к началу сегодняшней даты.

Код, который я до сих пор показан ниже.

class Trip { 

    private let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 

    var date: NSDate { 
     get { 
      return self.date 
     } 
     set { 
      self.date = calendar.startOfDayForDate(newValue) 
     } 
    } 
} 

Этот код а) не инициализирует свойство даты и б) (я обнаружил) результаты в бесконечном цикле, когда связующий называется. По дальнейшим исследованиям, я считаю, что настроенные геттеры/сеттеры строго рассчитаны, правильно?

Как добиться того, что я уже говорил ранее:

а) убедившись, что устанавливает для сброса date имущества на начало дня и

б) инициализация date свойства самого начала.. сегодняшней даты?

+0

Когда вы говорите о начале дня, что вы имеете в виду? Вы хотите, чтобы он вернул начало сегодняшнего дня или начало календаря? – dunnmifflsys

+0

Я хочу, чтобы время для моих дат обеспечивало правильные сопоставления дат. Поэтому я имею в виду начало дня (т. Е. Нулевой час, нулевые минуты, нулевые секунды). Я понимаю, что метод startOfDateForDate предоставит это. – whyceewhite

ответ

1

Я думаю, что вы хотите иметь дату, которая всегда будет началом даты. Заменить текущую date переменную с этим:

private var privateDate = NSDate() 
var date: NSDate { 
    get { 
     return privateDate 
    } 
    set { 
     privateDate = calendar.startOfDayForDate(newValue) 
    } 
} 

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

+0

Хорошо, я пришел к тому же выводу, что мне нужно иметь две переменные, которые вы демонстрируете с помощью 'privateDate' и' date'. Я мог бы инициализировать свойство 'privateDate' с помощью' (NSCalendar (calendarIdentifier: NSCalendarIdentifierGregorian)!). StartOfDayForDate (NSDate()) 'тоже. – whyceewhite

Смежные вопросы