swift属性的未知类型名称

时间:2014-06-07 16:22:27

标签: ios swift xcode6

我有一个用swift编写的CustomViewController类和一个用Objective C编写的CustomNavigationController类。我试图将CustomNavigationController作为属性添加到我的CustomViewController中。我已将#import "CustomNavigationController.h"添加到我的桥接标题中。

在我的CustomViewController中,我有:

class CustomViewController: UIViewController {

    var navController: CustomNavigationController?
...
//init methods


...


 override func viewDidLoad() {
        super.viewDidLoad()

        //Set up Navigation Controller
        navController = self.storyboard.instantiateViewControllerWithIdentifier("CustomNavigationController") as CustomNavigationController!
}

在我尝试构建和运行之前没有错误...我得到"未知类型名称' CustomNavigationController&#39 ;;你的意思是' UINavigationController'?"

有谁知道它为什么不识别这种类型?

5 个答案:

答案 0 :(得分:22)

在Objective-C代码中,您可以导入自动生成的-Swift.h标头。在相同的代码中,之前 #import行,插入#import "CustomNavigationController.h"。这两个#import语句的顺序至关重要!

这将通过确保CustomNavigationController在自动生成的-Swift.h标头之前位于命名空间中来解决问题,因此后者将了解前者并且一切都会很好。

如果Objective-C类不需要了解CustomNavigationController,这会令人烦恼,但它可以解决前面的问题并允许您继续使用混合项目。

答案 1 :(得分:6)

看起来ProjectName-Swift.h生成的头文件不会自动包含ProjectName-Bridging-Header.h的内容。这会导致在导入ProjectName-Swift.h之前尚未声明的任何类型在编译器中抛出Unknown type name错误。这似乎是一个错误。

我的解决方法是创建一个替代版本的ProjectName-Swift.h,前向声明导致错误的类,然后导入ProjectName-Swifth.h。我叫它ProjectName-Swift-Fixed.h。对我来说,ProjectName-Swift-Fixed.h看起来像这样:

// ProjectName-Swift-Fixed.h
@class CustomViewController;
#import "ProjectName-Swift.h"

然后,在我#include "ProjectName-Swift.h"的代码中的任何地方,我都将其替换为#include "ProjectName-Swift-Fixed.h"

答案 2 :(得分:4)

如果您无法通过更改上述答案所建议的#import语句的顺序来解决问题,则检查ProjectName-Bridging-Header.h中缺少框架导入的文件可能会有效。

就我而言,我在其中一种方法中使用UIImage的桥接头文件中有一个类。当我的项目完全由Objective-C组成时工作正常但在将此标题暴露给Swift时,我必须添加#import <UIKit/UIKit.h>才能删除错误。

答案 3 :(得分:0)

试试这个:

navController = self.storyboard.instantiateViewControllerWithIdentifier("CustomNavigationController") as? CustomNavigationController

答案 4 :(得分:0)

我遇到了同样的情况。在我的情况下,编辑&gt;在所有目标中将swift版本更新为3.0后解决了错误转换&gt;当前的Swift语法。希望它有所帮助