如果NSDate没有让我快速检查是否为零

时间:2015-06-06 21:38:29

标签: swift

我发现使用let来验证变量是否为nil或之前是否设置了值是非常混乱的。

\s*

有一个表单,用户可以设置他们的生日,并为此变量分配一个值。

稍后在doSave方法中,我想验证此字段是否已填充

declare @idToDelete varchar(max) = '10'

declare @sql nvarchar(max) = ''

set @sql =
(
select 'delete ' + object_name(c.object_id) + ' where id = ' + @idToDelete +  char(10)
from sys.columns c 
    join sys.objects o on o.object_id = c.object_id
    join sys.schemas s on s.schema_id = o.schema_id
        and s.name = 'dbo'
where c.name = 'id'     
for xml path('')
)

print @sql

exec sp_executesql @sql

我获得的最佳方法是根据another related question

创建第二个变量
var birthDate: NSDate?

我只收到警告:从'NSDate'到'NSDate'的有条件演员总是成功

这是实现这一目标的唯一方法吗?有什么不那么混乱吗?

3 个答案:

答案 0 :(得分:4)

var birthDate: NSDate?

if let birthDate = birthDate {
    println(birthDate.descriptionWithLocale(NSLocale.currentLocale())!)
} else {
    println("birthDate is nil")
}

birthDate = NSDate()
if let birthDate = birthDate {
    println(birthDate.descriptionWithLocale(NSLocale.currentLocale())!)
} else {
    println("birthDate is nil")
}

答案 1 :(得分:1)

在此您没有进行检查:

if let bd = birthDate! as? NSDate { ... continue save ... }
else { doAlert("You need to specify your birth date") }

您要做的是将生日更换为NSDate,您正在做的是强制NSDate?转为NSDate,然后您正在检查是否NSDate }是NSDate(它始终是,警告来自此处)。如果是,则将其置于变量bd

写得很久,你这样做了:

// force unwrap birthdate: birthDate!
if birthDate == nil {
    // this crashes the program
} else {
    if birthDate! is NSDate { // birthDate as? NSDate
        let bd = birthDate as! NSDate
        // Here ... continue save ... occurs
    } else {
        doAlert("You need to specify your birth date")
    }
}

正如您所看到的,您首先强制解包,然后检查它是否存在。

您应该使用if let - 语法:

执行以下操作
if let bd = birthDate {
    // continue save
} else {
    doAlert("You need to specify your birth date")
}

这转换为以下代码:

    if birthDate != nil { // birthDate as? NSDate
        let bd = birthDate!
        // Continue save
    } else {
        doAlert("You need to specify your birth date")
    }

答案 2 :(得分:0)

您可以替换

if let bd = birthDate! as? NSDate

if birthDate != nil