Swift 3:Date vs NSDate?

Mar*_*eon 35 nsdate swift

NS和非NS类有什么区别?特别是NSDatevs Date?是否NS表示围绕核心非NS功能性的某种类型的包装?

Mar*_*n R 55

Swift 3 为现有的Foundation类类型引入了一些新的重叠值类型,例如Datefor NSDate,Datafor NSData等等.完整列表和详细信息可以在中找到

一些原因是

  • 提供适当的价值语义,
  • letvar不是可变和不可变的变体,
  • 更多"Swifty"API.

新的叠加类型应提供相应Foundation类型具有的所有功能,但如有必要,您始终可以从一种类型转换为另一种类型.

将现有的Foundation API导入Swift时,类型会自动桥接.

关于DateNSDate:Date是一个值类型,可以是常量或变量:

var date = Date()
date += 10.0 // Add 10 seconds
Run Code Online (Sandbox Code Playgroud)

而是NSDate一个引用类型和不可变的.也Date就是Comparable

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

if date1 < date2 { }
Run Code Online (Sandbox Code Playgroud)

NSDates只能与之比较.compare().

备注: 对于这些"叠加类型", 可以从Swift中使用值类型(struct),例如Date它的基础对应物(类),例如NSDate不同的类型和两者.不能混淆

其中NS前缀只是简单取消了对某些基础类,如NSBundle重新命名,以Bundle对斯威夫特3.

  • @MarcusLeon:由于Swift在导入现有的Foundation API时已经桥接到新的覆盖类型,因此应该优先使用新类型.优点列在我链接的提案中(例如正确的值语义). - 如果某些方法不可用,则可以转换回Foundation类型并调用旧方法.示例:http://stackoverflow.com/questions/39519144/nslocale-swift-3. (3认同)