Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从Swift的Objective-c基本视图控制器继承_Ios_Objective C_Uiviewcontroller_Swift - Fatal编程技术网

Ios 从Swift的Objective-c基本视图控制器继承

Ios 从Swift的Objective-c基本视图控制器继承,ios,objective-c,uiviewcontroller,swift,Ios,Objective C,Uiviewcontroller,Swift,我正在尝试将UIViewControllerObjective-C类迁移到Swift。此视图控制器继承自BaseViewController,在该视图控制器中,我具有我希望在所有控制器中都具有的通用功能。我遇到的问题是,生成的myproject Swift.h无法找到我的BaseViewController 有没有办法在swift中实现从Objective-C编写的BaseViewController(UIViewController的子类)继承的UIViewController?是否存在桥接问

我正在尝试将
UIViewController
Objective-C类迁移到Swift。此视图控制器继承自
BaseViewController
,在该视图控制器中,我具有我希望在所有控制器中都具有的通用功能。我遇到的问题是,生成的
myproject Swift.h
无法找到我的
BaseViewController

有没有办法在swift中实现从Objective-C编写的
BaseViewController
(UIViewController的子类)继承的
UIViewController
?是否存在桥接问题

它可以用以下最小代码复制:

BaseViewController.h

#import <UIKit/UIKit.h>

@interface BaseViewController : UIViewController 
@end
#import "BaseViewController.h"
ViewController.swift

import UIKit

class ViewController : BaseViewController {

}
AppDelegate.m

import "BaseViewController.h"

@implementation BaseViewController
@end
#import "AppDelegate.h"
#import "projectname-Swift.h"   // Replace with your project name

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];

    return YES;
}
#import "AppDelegate.h"
#import "BaseViewController.h"
#import "projectname-Swift.h"   // Replace with your project name
// ...
projectname桥接头.h

#import <UIKit/UIKit.h>

@interface BaseViewController : UIViewController 
@end
#import "BaseViewController.h"

正如在关于

(将Swift导入目标C):

如果您在Swift代码中使用自己的Objective-C类型,请确保 在导入之前,导入这些类型的Objective-C标题 Swift生成的头文件插入要访问的Objective-C.m文件 来自的Swift代码

该示例通过在导入
projectname Swift.h
之前导入
BaseViewController
来解决:

AppDelegate.m

import "BaseViewController.h"

@implementation BaseViewController
@end
#import "AppDelegate.h"
#import "projectname-Swift.h"   // Replace with your project name

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];

    return YES;
}
#import "AppDelegate.h"
#import "BaseViewController.h"
#import "projectname-Swift.h"   // Replace with your project name
// ...

看起来他们已经解决了这个问题。目前在XCode6-Beta6下,@atxe报告的问题不再发生。因此,您最终可以将AppDelegate.m标题回滚到:

#import "AppDelegate.h"
#import "projectname-Swift.h"   // Replace with your project name

您的objc桥接头是什么样子的?@NateCook更新。这很简单。仅仅有一个桥接头是不够的,它设置正确吗?见@JackWu,我想是的。标题包含在“Objective-C桥接标题”中。很有趣。看起来您拥有正确格式和位置的所有必需零件。。。也许是个愚蠢的问题,但你真的构建/运行了这个项目吗?这是生成的.swift标头所必需的。在WWDC“与Objective-C集成”视频中的某个地方,也提到了使用@class forward声明,但我想不起来有多少细节。。。