Swift 3: Date vs NSDate?

Swift 3 introduced some new overlay value types for existing
Foundation class types, such as Date for NSDate, Data for
NSData and some more. The full list and details can be found in

  • SE-0069 Mutability and Foundation Value Types

Some of the reasons were

  • Provide proper value semantics,
  • let and var instead of mutable and immutable variants,
  • more “Swifty” APIs.

The new overlay types should provide all functionality that
the corresponding Foundation type has, but if necessary, you
can always cast from one type to the other.

When existing Foundation APIs are
imported into Swift, the types are bridged automatically.

With respect to Date and NSDate: Date is a value type
and can be a constant or variable:

var date = Date()
date += 10.0 // Add 10 seconds

whereas NSDate is a reference type and immutable.
Also Date is Comparable

let date1 = Date()
let date2 = Date()

if date1 < date2 { }

whereas NSDates can only be compared with .compare().

Remark: For these “overlay types”, the value type (struct)
such as Date and its Foundation counterpart (class) such as NSDate
are different types and both can be used from Swift.
It must not be confused with

  • SE-0086 Drop NS Prefix in Swift Foundation

where the NS prefix has simply been dropped for certain Foundation
classes, e.g. NSBundle is renamed to Bundle for Swift 3.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)