获取错误Receiver for class message是一个前向声明

时间:2017-01-23 07:00:17

标签: ios objective-c swift xcode

我正在创建自己的框架,我添加了客观的c文件,并且它工作正常后我需要在添加swift文件后添加一些swift文件xcode没有给我选择auto 创建桥接然后我跟着Mix and Match approach。我遵循了我理解的一切。

我想访问swift文件到Objective c但是我收到了前向声明错误所以这是我附上的示例代码,请指导我做错了。

TestObjectCFile.h

#import <Foundation/Foundation.h>
@class TestSwiftFile;
@interface TestObjCFile : NSObject


@end

TestObjectCFile.m

#import "TestObjCFile.h"
#import <TestFrameworkTry/TestFrameworkTry-Swift.h>
#import "TestFrameworkTry.h"


@implementation TestObjCFile

- (void)TestMethodForImportingSwiftFile
{

    TestSwiftFile * testSwiftFile = [[TestSwiftFile alloc] init];
//    TestSwiftFile * testSwiftFile = [self returnSwiftClassInstance];
    NSLog(@"%@",testSwiftFile);
}
@end

TestSwiftFile.swift

import Foundation

错误发生在 TestObjectCFile.m 后面的行。

TestSwiftFile * testSwiftFile = [[TestSwiftFile alloc] init];

如附图所示。 enter image description here

1 个答案:

答案 0 :(得分:16)

最后我得到了解决方案。我做了以下更改。以下是您的框架中的列表。

Objective C类中的Swift类用法

  • 在Swift中的类名前使用Open Keyword
  • 在打开Swift类的关键字
  • 之前使用@objc关键字
  • 在Umbrella文件中导入目标c类的所有标题 YourProject.h那些正在使用Swift Classes。
  • 在目标中使用#import <YourProjectName/YourProjectName-Swift.h> ç

我遵循Apple的Mix and Match方法。

注意:有时<YourProjectName/YourProjectName-Swift.h>文件无法导入标头,只能导入.m个文件。仅供参考,此文件由编译器自动创建。如果您在项目中搜索它,您将无法找到它,但如果您在目标文件中点击它(作为代码中导入的文件),Xcode将(应该)打开它并向您展示Swift类的所有Objective-C类接口。要查看Swift的名称 - &gt; Objective-C模块标题,转到目标的构建设置并搜索$(SWIFT_MODULE_NAME)-Swift.h或仅-Swift