如何检查日期是否为零?

时间:2017-04-30 06:15:47

标签: swift

我有一个class名称具有以下setter和getter的人。

private var _signedDate:Date? = nil
var signedDate:Date {
    get {
        return _signedDate!
    }
    set (newDate) {
        _signedDate = newDate
    }
}

因为我有一个变量'signedDate` - 我想制作一个检查功能,让一个人知道他是否已经签名。所以为此,我想写一个这样的函数:

func hasSigned() -> Bool {
    if signedDate {
        return true
    }
    return false
}

现在编译器给出了以下错误:

  

'日期'不能转换为'Bool'。

在Obj-C中,我们可以简单地检查特定变量的nil。但是对于Swift的情况,这已经改变了。

我该怎么办?

如果是String,则有一种方法:isEmpty()。但是Date没有这样的方法。

4 个答案:

答案 0 :(得分:5)

只需输入:

return _signedDate != nil

答案 1 :(得分:4)

在您的代码中,您无法在访问_signedDate时强行解除signedDate,因为如果_signedDate为零,则会抛出运行时错误。

signedDate为零时,_signedDate有默认值,或者signedDate也属于Date?类型。

可以使用以下方法检查日期是否为零

func hasSigned() -> Bool {
    if _signedDate == nil {
        return false
    }
    return true
}

提供默认日期(如果有意义):

private var _signedDate:Date? = nil
var signedDate:Date {
    get {
        return _signedDate ?? Date() // or some valid date
    }
    set (newDate) {
        _signedDate = newDate
    }
}

答案 2 :(得分:1)

只需将Date的实例与nil进行比较即可! :)

if _signedDate == nil
{
     print("Found Nil")
}

答案 3 :(得分:1)

首先,在Swift中使用私有支持变量。

只需以这种方式声明变量,即使不需要分配nil

var signedDate : Date? 

其次,通常在您需要解包的值时检查nil。如果检查通过if条件date被解包(非nil)。请阅读Swift Language Guide - The Basics

中的段落 Optional Binding
if let date = signedDate {
  print(date)
} else {
  // signedDate is nil
}

或使用guard退出函数/方法

guard let date = signedDate else { return }
print(date)

但是,如果您想要一个返回Bool写入

的函数
func hasSigned() -> Bool {
    return signedDate != nil
}

或作为计算变量

var hasSigned : Bool { 
   return signedDate != nil  
}