迭代数组并存储结果

时间:2015-01-19 19:45:27

标签: ios swift

我有一个名为thoughtArray的数组,它是一个名为ThoughtObject的自定义对象的数组。 ThoughtObject有一个名为' createdDate'它包含NSDate,即创建对象的日期。

我需要过滤该数组并查找与当前日期匹配的所有对象,然后将它们附加到另一个数组。

到目前为止,所有尝试均未成功。这就是我在下面尝试过的。

for createdToday in thoughtArray {
        if (createdToday.createdDate?.isEqualToDate(NSDate()) != nil) {
            createdTodayArray.append(createdToday)

        }
    }

问题是,即使将具有设置为几天前的createdToday属性的对象添加到数组中。

非常感谢帮助。

3 个答案:

答案 0 :(得分:0)

NSDate对象表示特定时刻。因此,数组中的日期不太可能正好代表NOW。

有几种方法可以确定日期是否为今天。您可以将日期转换为NSDateComponents并比较年,月和日。

答案 1 :(得分:0)

有两个问题。首先,“可选链接”

createdToday.createdDate?.isEqualToDate(NSDate()

是否返回nil,具体取决于createdToday.createdDatenil。那不是你想要的。

第二,正如@thelaws在答案中所说,isEqualToDate() 如果两个日期代表完全相同的时刻,则仅返回yesNSCalendar有一个

func compareDate(date1: NSDate, toDate date2: NSDate, toUnitGranularity unit: NSCalendarUnit) -> NSComparisonResult

方法(自iOS 8起可用),可在此处使用:

let cal = NSCalendar.currentCalendar()
let now = NSDate()
for createdToday in thoughtArray {
    if let createdAt = createdToday.createdDate {
        // compare with "day granularity":
        if cal.compareDate(createdAt, toDate: now, toUnitGranularity: .CalendarUnitDay) == .OrderedSame {
              createdTodayArray.append(createdToday)
        }
    }
}

答案 2 :(得分:0)

使用Martin提到的compareDate函数和Array的过滤函数:

var thoughtArray = [ThoughtObject]()
var cal = NSCalendar.currentCalendar()
var createdToday = thoughtArray.filter {
    if let createdDate = $0.createdDate {
        return cal.compareDate(NSDate(), toDate: createdDate, toUnitGranularity: .CalendarUnitDay) == .OrderedSame
    }
    else {
        return false;
    }
}