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
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 NSDate
s 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
where the NS
prefix has simply been dropped for certain Foundation
classes, e.g. NSBundle
is renamed to Bundle
for Swift 3.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…