如何将@class前向声明翻译成Swift?

时间:2017-05-09 15:22:08

标签: objective-c swift

我在Objective-C的AppDelegate中。

@class PhoneViewController;

@interface AppDelegate : NSObject <UIApplicationDelegate> {

    IBOutlet UINavigationController *numberActivationFlow;
    IBOutlet UINavigationController *phoneFlow;
    IBOutlet PhoneViewController *phoneViewController;
    IBOutlet UINavigationController *configurationWizardFlow;
    IBOutlet UIViewController *configurationWizardFlowRoot;

    IBOutlet NumberActivationViewController *numberActivationViewController;

    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;       
    NSPersistentStoreCoordinator *persistentStoreCoordinator;

    IBOutlet UINavigationItem *captionNavigationItem;

    BOOL initialized;
    BOOL firstTimeExecCompleted;
    BOOL firstTimeActive;
    BOOL started;
    Activation* activation;
    Variant* variant;
}

+ (AppDelegate*) sharedInstance;

我正在将上述类翻译成Swift,我想知道如何翻译以下行:

@class PhoneViewController;

特别是上面的代码@class PhoneViewController;有问题。如何在Swift中编写,因为它不是变量?

2 个答案:

答案 0 :(得分:1)

现在您已经澄清了您的问题,答案很简单。转换为Swift时,您只需忽略@class PhoneViewController行。

这在Objective-C中被称为前向声明。它在Swift中没有对应物。

答案 1 :(得分:0)

如果您不拥有代码,就不能总是忽略@class转发声明。

“错误”报告:

我使用的是Objective-C库,该库作为不透明的第三方框架使用,仅公开头文件。发生错误时,框架将生成MyError对象并将其出售给委托。到目前为止,一切都很好。

由于使用该框架的开发人员从不创建此类的对象,因此可以公开,但无需担心;因为它是预先声明的,所以很好-在ObjC中!但是Swift没有前向声明,该对象在依赖ObjC框架的Swift文件中被忽略。在这种情况下,没有MyError对象意味着没有错误报告。很大!

解决方法

我通过在Swift文件中重新声明它来解决此问题,例如“ MyError + Workaround.swift”。

import Foundation

class MyError: NSError {} // the object actually is an NSError subclass

就是这样。希望这可以帮助其他人。