繁体   English   中英

如何将@class 前向声明转换为 Swift?

[英]How to translate @class forward declaration to Swift?

我在我的 AppDelegate 中有 Objective-C。

@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;了问题@class PhoneViewController; . 我怎样才能用 Swift 编写,因为它不是一个变量?

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

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

如果您不拥有代码,则不能总是忽略@class前向声明。

'错误报告:

我使用作为不透明第三方框架使用的 Objective-C 库,仅公开头文件。 发生错误时,框架会生成一个MyError对象并将其MyError给委托。 到现在为止还挺好。

由于使用框架的开发者从来没有创建过这个类的对象,所以暴露,但是不用担心; 因为它是预先声明的,所以没问题——在 ObjC 中! 但是 Swift 没有前向声明,并且在依赖 ObjC 框架的 Swift 文件中忽略了该对象。 在这种情况下,没有MyError对象意味着没有错误报告!

解决方法

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

import Foundation

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

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

更新

我们通过在伞头中显式添加类来修复代码; 不再需要编码扭曲。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM