我有一个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
没有这样的方法。
答案 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
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
}