Swift 3:日期与 NSDate?
Swift 3: Date vs NSDate?
国服和非国服有什么区别类?特别是 NSDate
与 Date
? NS
是否代表核心非 NS
功能的某种包装器?
Swift 3 引入了一些新的覆盖值类型
基础 class 类型,例如 Date
代表 NSDate
,Data
代表
NSData
等等。完整列表和详细信息可在
中找到
部分原因是
- 提供适当的值语义,
let
和 var
而不是可变和不可变变体,
- 更多 "Swifty" 个 API。
新的覆盖类型应该提供所有功能
相应的基础类型有,但如果有必要,你
总是可以从一种类型转换为另一种类型。
当现有的 Foundation API 是
导入 Swift,类型自动桥接。
关于Date
和NSDate
:Date
是一个值类型
可以是常量或变量:
var date = Date()
date += 10.0 // Add 10 seconds
而 NSDate
是引用类型且不可变。
另外 Date
是 Comparable
let date1 = Date()
let date2 = Date()
if date1 < date2 { }
而 NSDate
s 只能与 .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 类 的工作方式可能并不完全相同。
NSDate
和 Date
不是一回事。 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)但显然选择没有任何前缀
国服和非国服有什么区别类?特别是 NSDate
与 Date
? NS
是否代表核心非 NS
功能的某种包装器?
Swift 3 引入了一些新的覆盖值类型
基础 class 类型,例如 Date
代表 NSDate
,Data
代表
NSData
等等。完整列表和详细信息可在
部分原因是
- 提供适当的值语义,
let
和var
而不是可变和不可变变体,- 更多 "Swifty" 个 API。
新的覆盖类型应该提供所有功能 相应的基础类型有,但如果有必要,你 总是可以从一种类型转换为另一种类型。
当现有的 Foundation API 是 导入 Swift,类型自动桥接。
关于Date
和NSDate
:Date
是一个值类型
可以是常量或变量:
var date = Date()
date += 10.0 // Add 10 seconds
而 NSDate
是引用类型且不可变。
另外 Date
是 Comparable
let date1 = Date()
let date2 = Date()
if date1 < date2 { }
而 NSDate
s 只能与 .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 类 的工作方式可能并不完全相同。
NSDate
和 Date
不是一回事。 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)但显然选择没有任何前缀