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。 这意味着它已被正式弃用。