使用自定义 setter/getter 并为 swift 日期初始化 属性
Using customized setter/getter and initializing the property for a swift date
我有一个名为 Trip
的 class,它有一个名为 date
的 NSDate
属性。我的愿望是确保 date
属性 始终将时间值设置为一天的开始。我这样做:
- 创建一个名为
calendar
的 NSCalendar
常量,以便我可以使用 startOfDayForDate
方法重置日期值。
- 正在为调用 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,所以你应该没问题。
我有一个名为 Trip
的 class,它有一个名为 date
的 NSDate
属性。我的愿望是确保 date
属性 始终将时间值设置为一天的开始。我这样做:
- 创建一个名为
calendar
的NSCalendar
常量,以便我可以使用startOfDayForDate
方法重置日期值。 - 正在为调用 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,所以你应该没问题。