2017-01-23 5 views
1

С момента перехода на Swift 3.0, а вместе с ним и изменения NSDate на Date, класс больше не соответствует протоколу NSCopying.Date.copy() в Swift 3.0

В Swift 2, это действительно было:

let newDate = oldDate.copy() 

Но теперь возвращает ошибку компилятора.

В этом случае, что является лучшим способом дублирования объекта Date?

let newDate = Date(timeIntervalSince1970: oldDate.timeIntervalSince1970) 

Это будет трюк, но это не кажется особенно элегантным. И это потенциально (теоретически) восприимчиво к потере точности, поскольку TimeInterval является Double (и мы не можем подтвердить, что внутренние объекты Date используют - или всегда будут использовать - Double).

ответ

5

Ответ на мой вопрос, как я понял, прежде чем я закончил набирать его. Надеюсь, это поможет кому-то другому.

Дата в Swift 3 теперь является структурой, а не классом. Какой тип значения. Это означает, что он не должен быть «скопированы», просто присвоив его новой переменной будет копировать данные:

let newDate = oldDate 
+1

Ваш ответ правильный - но если бы вы были извращенный, вы можете также сказать 'пусть newDate = ((oldDate as NSDate) .copy()) как! Дата' :) – Grimxn