我有一个来自服务器的对象,被Swift 2.1识别为NSDate或NSNull。我想将它放入一个具有NSDate类型属性的结构中。 那可能吗?如果没有,我应该在以后使用它时如何处理这种类型?
struct Data {
var completedAt: [NSDate]
var name: [String]
var gender: [Bool]
}
但有时完成来自服务器的NSNull:
completedAt = "<null>";
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
根据我对问题中文本的解释,你并不意味着将变量声明为数组。
这就是我处理我的牧师的方式,我认为它的工作非常巧妙。 日期格式化程序可能不会在构造函数的每次迭代中启动。如果您不能定期使用该日期,您可能希望保持讨厌,直到您需要解析日期,或者您可以拥有一个仅实例化一次的静态日期格式化工具。
struct Data {
var completedAt: NSDate?
var name: String
var gender: Bool
init?(dictionary: [String:AnyObject]) {
//Guessing that you want some of the values non optional...
guard let name = dictionary["name"] as? String,
let gender = dictionary["gender"] as? String
else {
return nil
}
self.name = name
self.gender = gender
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
//safe handle of optional values
if let completedAtString = dictionary["completedAt"] as? String, completedAt = dateFormater.dateFromString(completedAtString) {
self.completedAt = completedAt
}
}
}
答案 1 :(得分:0)
退后一步。对于服务器可能提供的每个项目,无法保证您收到预期的内容,因为您无法控制服务器。所以你需要决定如何对哪个输入做出反应。
例如,在期待日期的情况下(如果您的数据是JSON,这意味着您可能期望以某种方式格式化字符串),您收到的实际数据可能是数组,字典,字符串,数字,bool,null或什么也没有。然后,您可能会例如决定要将任何内容解释为null或将空字符串解释为nil,您希望将包含格式良好的日期的字符串解释为NSDate,以及调试版本中的任何其他致命错误,以及在发布版本中没有任何内容或致命错误。另一方面,如果绝对需要NSDate,那么您可能会解释任何不能将NSDate作为错误的内容。
然后你编写一个功能,提供你想要的东西并使用它。通过这种方式,您可以解析复杂的数据,当您的代码不应该是您的代码时,您的代码会警告您,并且您的代码要么在任何可能的输入中存活,要么故意在错误的输入上崩溃,如您所愿。