我在swift中转换和比较NSString和NSDate的函数存在一些问题。
func Parse(pouet : NSString, Limite : NSDate) {
let word = pouet.componentsSeparatedByString("\"")
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
for var index = 11; (index < word.count-6); index+=6 {
var datefromstring = dateFormatter.dateFromString(word[index] as String)
if (((datefromstring?.isEqualToDate(Limite))) != nil) {
println("<<<")
println(datefromstring)
println(Limite)
println(">>>")
}
}
}
输出:
<<<
Optional(2014-12-02 10:30:00 +0000)
2014-12-04 18:36:32 +0000
>>>
出了什么问题?我希望只在DateFromString和Limite相同时才打印(或者当Limite高于datefromstring时)。
先谢谢。
答案 0 :(得分:0)
if (((datefromstring?.isEqualToDate(Limite))) != nil) {
好吧,考虑一下:datefromstring?.isEqualToDate(Limite)
是YES还是NO(Swift true
或false
)。这些都不是nil
。所以这种情况总是成功的。
确实,true
或false
包含在一个Optional中。这是因为您在“可选”上调用了isEqualToDate
。但是,您在此处测试的是,可选datefromstring
是否为零 - 您没有测试它包含的内容是true
还是false
,因为它们两个都是非零的。
因此,您没有表达您希望表达的区别。
答案 1 :(得分:0)
对dateFromString
结果使用可选绑定可能更容易,然后在switch语句中使用日期&#39; compare
方法:
if let datefromstring = dateFormatter.dateFromString(word[index] as String) {
switch datefromstring.compare(Limite) {
case .OrderedAscending:
println("datefromstring before Limite")
case .OrderedDescending:
println("datefromstring after Limite")
case .OrderedSame:
println("exact match!")
}
}