NSDate()vs Swift中的NSDate.date()

max*_*max 42 cocoa objective-c nsdate ios swift

我跟随Bloc.io Swiftris教程,他们通过以下方式初始化日期:

lastTick = NSDate.date()
Run Code Online (Sandbox Code Playgroud)

这导致编译错误:

'date()' is unavailable: use object construction 'NSDate()'
Run Code Online (Sandbox Code Playgroud)

哪个应该相等:

NSDate *lastTick = [NSDate date];
Run Code Online (Sandbox Code Playgroud)

(来自NSDate参考)

Apple是否将Swift界面更改为NSDate,因为我看过其他使用的示例NSDate.date

这只是NSDate还是你不能为任何Objective-C API调用类型方法?

ban*_*isa 78

[NSDate date] 是用于构造NSDate对象的工厂方法.

如果您阅读"使用Swift with Cocoa和Objective-C"指南,则有一节与Objective-C apis进行交互:

为了一致性和简单性,Objective-C工厂方法在Swift中被映射为便捷初始化器.这种映射允许它们使用与初始化器相同的简洁,清晰的语法."

摘录自:Apple Inc."将Swift与Cocoa和Objective-C结合使用."iBooks.https://itun.es/gb/1u3-0.l

所以工厂方法:

[NSDate date]
Run Code Online (Sandbox Code Playgroud)

在Swift中转换为初始化器

NSDate()
Run Code Online (Sandbox Code Playgroud)

这不仅仅是NSDate,你会发现这种模式,但在其他Cocoa API中有工厂方法.


Chi*_*buZ 11

这似乎NSDate()是新的语法.以前,NSDate.date()工作过,

现在你应该使用 NSDate()


ZeM*_*oon 8

在Objective-C中,[NSDate date]只需调用[[NSDate alloc] init].因此,您不需要调用NSDate.date()Swift.简单地调用NSDate()将使用当前日期初始化日期对象.


The*_*ant 6

Apple将Swift界面改为NSDate吗?

是的,他们确实.对我来说,编译器告诉:

Foundation.NSDate:3:26:注意:'date()'在这里明确标记为不可用:

@objc(date) class func date() -> Self!

因此,Swift明确标记为不可用.这意味着它已被正式弃用.