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

我跟着Bloc.io Swiftris教程 ,他们在这里初始化一个date:

lastTick = NSDate.date() 

这导致编译错误:

 'date()' is unavailable: use object construction 'NSDate()' 

这应该等于:

 NSDate *lastTick = [NSDate date]; 

(来自NSDate参考 )

苹果是否将Swift接口更改为NSDate ,因为我已经看到了使用NSDate.date其他示例?

这只是NSDate,或者你不能调用任何Objective-C API的types方法吗?

[NSDate date]是一个构造NSDate对象的工厂方法。

如果您阅读“使用Cocoa和Objective-C使用Swift”指南,那么有一部分与Objective-C API进行交互:

为了一致性和简单性,Objective-C工厂方法被映射为Swift中的便捷初始值设定项。 这种映射使得它们可以像初始化一样使用简洁明了的语法。“

摘自:苹果公司“使用cocoa和Objective-C的Swift”iBooks。 https://itun.es/gb/1u3-0.l

所以工厂方法:

 [NSDate date] 

在Swift中被转换成一个初始化器

 NSDate() 

这不只是NSDate,你会发现这种模式,但在其他cocoaAPI的工厂方法。

看来, NSDate()是新的语法。 以前, NSDate.date()工作,

现在你应该使用 NSDate()

在Objective-C中, [NSDate date]只需调用[[NSDate alloc] init] 。 因此,你不需要在Swift中调用NSDate.date() 。 简单地调用NSDate()将初始化一个date对象与当前date。

苹果是否改变了NSDate的Swift接口?

是的,他们做了。 对我来说,编译器告诉:

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

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

所以它被明确标记为不可用Swift。 这意味着它已被正式弃用。