[英]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.