Date.copy() в Swift 3.0
После перехода на Swift 3.0, а также изменения NSDate на Date, класс больше не соответствует протоколу NSCopying.
В Swift 2 это было действительно:
let newDate = oldDate.copy()
Но теперь возвращает ошибку компилятора.
В таком случае, каков наилучший способ дублировать объект Date?
let newDate = Date(timeIntervalSince1970: oldDate.timeIntervalSince1970)
Это сделает свое дело, но это не кажется особенно элегантным. И он потенциально (теоретически) подвержен потере точности, поскольку TimeInterval является Double (и у нас нет способа подтвердить, что внутреннее устройство объекта Date использует - или всегда будет использовать - Double).
1 ответ
Отвечая на мой собственный вопрос, когда я понял это, прежде чем закончил печатать. Надеюсь, это поможет кому-то еще.
Дата в Swift 3 теперь является структурой, а не классом. Который является типом значения. Это означает, что его не нужно "копировать", просто присвоение его новой переменной скопирует данные:
let newDate = oldDate