NSDate formatString 有时 return nil

NSDate formatString sometimes return nil

我创建了一个 class,它有一个 NSDate 对象,该对象是根据 JSON 中的值创建的。字符串值类似于:2016-12-02T13:51:23+01:00。大多数情况下,字符串已成功转换并创建了日期对象,但有时应用程序在尝试强制解包可选值时崩溃,我不知道在哪里。有时失败的代码行是:

self.creationMoment = stringDateFromJson == nil ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssZ")

有人知道吗?

有可能你的对象是 NSNull class? 在这种情况下,您可以使用:

self.creationMoment = stringDateFromJson.isKind(of: NSNull) ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssZ")

我相信您的 stringDateFromJson 有时可能是空的。因此 == nil 将为 false,当尝试使用空字符串创建 NSDate 时返回 nil。尝试将您的代码更改为以下内容 let isNotValidStringDate = stringDateFromJson == nil || stringDateFromJson.isEmpty self.creationMoment = isNotValidStringDate ? NSDate() : NSDate(string: stringDateFromJson, formatString: "yyyy-MM-dd'T'HH:mm:ssh")

我将 creationMoment 变量重新声明为 Swift Date 而不是 NSDate 并且这个问题再也没有出现过,它可能是一个 Apple bug...