Swift 3:日期与 NSDate?

Swift 3: Date vs NSDate?

国服和非国服有什么区别类?特别是 NSDateDateNS 是否代表核心非 NS 功能的某种包装器?

Swift 3 引入了一些新的覆盖值类型 基础 class 类型,例如 Date 代表 NSDateData 代表 NSData 等等。完整列表和详细信息可在

中找到

部分原因是

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

新的覆盖类型应该提供所有功能 相应的基础类型有,但如果有必要,你 总是可以从一种类型转换为另一种类型。

当现有的 Foundation API 是 导入 Swift,类型自动桥接。

关于DateNSDateDate是一个值类型 可以是常量或变量:

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

NSDate 是引用类型且不可变。 另外 DateComparable

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

if date1 < date2 { }

NSDates 只能与 .compare() 进行比较。

备注:对于这些"overlay types",值类型(struct) 例如 Date 及其对应的基金会 (class) 例如 NSDate 是不同的类型,都可以从 Swift 开始使用。 它不能与

混淆

其中 NS 前缀已被某些 Foundation 删除 classes,例如NSBundle 重命名Bundle for Swift 3.

NS 类 是 Objective-C 类。由于 Objective-C 是 iOS 或 MacOS 应用程序的旧编程语言,Swift 允许您在代码中使用那些 类 结构。因此,您可以根据需要将应用程序从 Objective-C 迁移到 Swift。

非 NS 类 或结构是 NS 类 或结构的 Swift 等价物。您可以阅读有关此问题的更多信息 here or here

但请注意:由于 Objective-C 和 Swift 确实是不同的编程语言,因此 NS 和非 NS 类 的工作方式可能并不完全相同。

NSDateDate 不是一回事。 NS(下一步)类 目前仅在 Objective-C 中使用,因此在 Objective-C 中表示日期变量 NSDate。

特别是 Swift 3.0 的最新版本 Swift Apple 已经完全消除了对任何类型使用 NS 前缀的需要。所以就在 Swift 三个中,我们现在使用 Date 而不是 NSDate。让你的代码看起来更简洁

NS和非NSclasses的区别在于NSclasses是引用类型,非NSclasses是值类型。在 swift 3 中,Apple 引入了像 NSDate 这样的 Foundation classes 并将它们重新命名为 Date 但由于 swift 基于值类型而不是引用类型,因此 Date 是一种值类型. 例如:

let date = NSDate() //1
date.dateByAddingTimeInterval(1000) //2 

2。允许的,因为虽然日期是常量,但可变性取决于 class 而不是 let vs 变量。

let date = Date() //3
date.dateByAddingTimeInterval(1000) //4

4。不允许不允许并且会导致错误,因为 let 使 'date' 成为常量 'let' 因为日期是 Date() 类型,它是一种值类型。

除了上面给出的答案,从更表面的文字设计意义上讲,NS 是 NextStep 时代所有事物的前缀,在史蒂夫乔布斯被召回 Apple 之前,Objective-C语法。

快进到 Swift 的开发中,他们需要一个明显的区别点,而且它很可能是 CL 作为前缀,(对于 Chris Lattner)但显然选择没有任何前缀