【问题标题】:Swift - optional dates comparisonSwift - 可选日期比较
【发布时间】:2016-01-02 18:14:14
【问题描述】:

我正在尝试快速实现代码,这将为我提供与当前日期最接近的日期。

问题是我希望用户最多选择 3 个日期,每次他选择的日期都会添加到名为“提醒”的数组中

然后我检查这个数组中有多少项(最多 3 个)(命名为:提醒),并使用 CoreData 存储数组中的特定日期/日期:

if addObjectView.reminders.count == 1 {
            newobject.firstReminder = addObjectView.reminders[0]
        }
        if addObjecteView.reminders.count == 2 {
            newobject.firstReminder = addObjectView.reminders[0]
            newobject.secondReminder = addObjectView.reminders[1]

        }
        if addObjectView.reminders.count == 3 {
            newobject.firstReminder = addObjectView.reminders[0]
            newobject.secondReminder = addObjectView.reminders[1]
            newobject.thirdReminder = addObjectView.reminders[2]
        }

然后我想实现代码来首先检查来自 CoreData 的第一个/第二个/第三个提醒是否为零,如果不是,则将其与当前日期进行比较。如果它“更大”,则将此日期的字符串设置为标签。但我也想比较他们之间的第一个/第二个/第三个提醒的日期,或者以某种方式确保第一个提醒总是早于第二个等等。

我不知道这是否有那么难,但我正在努力解决问题,但我被卡住了。

【问题讨论】:

    标签: ios swift date core-data


    【解决方案1】:

    您应该为此使用nil coalescing operator

    如果 (a ?? b) 包含一个值,则 nil 合并运算符 (a ?? b) 解包可选的 a,如果 a 为 nil,则返回默认值 b。表达式a 始终是可选类型。表达式 b 必须与存储在 a 中的类型匹配。

    Source - developer.apple.com

    你可以得到提醒的日期,存储在myOptionalDate,然后检查它是否为nil。如果是,那我们就做

    0 > NSDate().timeIntervalSince1970
    

    这将永远是错误的。如果它不是 nil,我们可以做相当于

    myOptionalDate!.timeIntervalSince1970 > NSDate().timeIntervalSince1970
    

    它会告诉你是否应该添加标签

    if((myOptionalDate?.timeIntervalSince1970 ?? 0) > NSDate().timeIntervalSince1970){
        //add the label
    }
    

    什么是简写

    var myInterval = 0
    if(myOptionalDate != nil){
        myInterval = myOptionalDate!.timeIntervalSince1970
    }
    
    if(myInterval > NSDate().timeIntervalSince1970)
    

    此外,虽然这与问题无关,但取决于您的代码的格式,您不应该使用 if 语句来检查有多少提醒

    默认情况下,newobject.firstRemindernewobject.secondRemindernewobject.thirdReminder 将(我假设)为零。因此,您可以将所有示例代码更改为

    let originalReminders = addObjectView.reminders
    newobject.firstReminder = originalReminders.count > 0 ? originalReminders[0] : nil
    newobject.secondReminder = originalReminders.count > 1 ? originalReminders[1] : nil
    newobject.thirdReminder = originalReminders.count > 2 ? originalReminders[2] : nil
    

    如果默认值不为零,您可以简单地将上面代码中的nil 替换为您的默认值

    【讨论】:

    • 完美的想法,使用 NSTimeIntervalSince1970!谢谢!
    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多