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
Другие вопросы по тегам