【发布时间】:2016-01-25 23:51:43
【问题描述】:
Objective-C API 使用类方法进行大量对象构造:
+ (NSDate *)date;
+ (NSURL *)urlWithString:(NSString *)string;
+ (instancetype)layerWithSession:(AVCaptureSession *)session
有时我什至看到这些作为类方法出现在旧的 Swift 教程中,但是当我尝试调用它们时,我得到如下编译器错误:
date()不可用,使用对象构造NSDate()
urlWithString()不可用,使用对象构造NSURL(string:)
layerWithSession()不可用,使用对象构造AVCaptureVideoPreviewLayer(session:)
(我在文档和 Xcode 为 SDK 类生成的 Swift 接口中看到了类似 convenience init(URL url: NSURL) 的声明,但它们与这些有什么关系?)
当我在自己的 ObjC 代码中声明类方法时,甚至会发生这种情况,例如单例模式:
@interface MyManager: NSObject
+ (instancetype)manager;
@end
当我尝试从 Swift 中使用它们时,我得到了同样的错误:
let manager = MyManager.manager()
// error: 'manager()' is unavailable, use object construction 'MyManager()'
什么给了?如何修复这些错误?
【问题讨论】:
-
我看到很多问题都以这个问题为根本原因,但讨论和答案过于依赖特定案例而无法标记为彼此重复。这是对问题进行概括的尝试——对于有权关闭重复项的其他人,如果您认为它足够好地解决了该问题,请随意欺骗此问答。 (我自己会弃权,让社区来判断是否值得欺骗。)
标签: objective-c swift