【发布时间】:2018-07-03 15:56:27
【问题描述】:
我在寻找获取当前时间的简单方法时发现了这个过时的问题 (-> Swift get server time)。
我已将代码从 (-> Answer) 更新到当前的 Swift 版本,现在看起来像这样:
func serverTimeReturn(completionHandler:@escaping (_ getResDate: NSDate?) -> Void){
let url = NSURL(string: "http://www.google.com")
let task = URLSession.shared.dataTask(with: url! as URL) {(data, response, error) in
let httpResponse = response as? HTTPURLResponse
if let contentType = httpResponse!.allHeaderFields["Date"] as? String {
let dFormatter = DateFormatter()
dFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss z"
var serverTime = dFormatter.date(from: contentType)
completionHandler(serverTime as! NSDate)
}
}
task.resume()
}
...调用...
serverTimeReturn { (getResDate) -> Void in
var dFormatter = DateFormatter()
dFormatter.dateStyle = DateFormatter.Style.long
dFormatter.timeStyle = DateFormatter.Style.long
dFormatter.timeZone = NSTimeZone(abbreviation: "GMT") as! TimeZone
var dateGet = dFormatter.string(from: getResDate as! Date)
print("Formatted Time : \(dateGet)")
}
但我仍然收到此错误消息:
Fatal error: Unexpectedly found nil while unwrapping an Optional value
--> Thread 3: EXC_BREAKPOINT (code=1, subcode=xyz) 同时调用completionHandler(serverTime as! NSDate)
我不知道如何摆脱这个错误,非常感谢任何帮助!
【问题讨论】:
-
"致命错误:在展开可选值时意外发现 nil" 这意味着某些东西是 nil。试着找出哪一个。您使用各种
!大喊:“如果值为 nil,则崩溃”。 -
我很确定 serverTime 必须为零,这也是崩溃的原因!
-
你应该使用 https。请注意,在 Swift 3 或更高版本中,您应该从 NSDate、NSTimeZone 和 NSURL 中删除 NS 前缀
-
我没有运行你的代码,但是如果
serverTime为nil,而你运行serverTime as! NSDate,那会导致崩溃。你的 dateFormatter 错了吗?你介意打印contentType吗?