使用自定义 setter/getter 并为 swift 日期初始化 属性

Using customized setter/getter and initializing the property for a swift date

我有一个名为 Trip 的 class,它有一个名为 dateNSDate 属性。我的愿望是确保 date 属性 始终将时间值设置为一天的开始。我这样做:

  1. 创建一个名为 calendarNSCalendar 常量,以便我可以使用 startOfDayForDate 方法重置日期值。
  2. 正在为调用 startOfDayForDate 方法的 date 属性 创建自定义 setter 方法。

但是,我想将 date 属性 初始化为今天日期的开始。

我目前的代码如下所示。

class Trip {

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

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

此代码 a) 未初始化日期 属性 并且 b)(我发现)在调用 setter 时导致无限循环。经过进一步研究,我认为定制的 getters/setters 是 严格计算的 ,对吗?

如何完成我之前提到的内容:

a.) 确保设置为 date 属性 重置为一天的开始和

b.) 将 date 属性 初始化为今天日期的开始?

我想你想要一个永远是日期开始的日期。将您当前的 date 变量替换为:

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

可能有更好的方法来做到这一点,但我猜你的应用程序不会有数万次你的旅行class,所以你应该没问题。