【问题标题】:Getting Error Receiver for class message is a forward declaration获取类消息的错误接收器是前向声明
【发布时间】:2017-01-23 07:00:17
【问题描述】:

我正在创建自己的框架,我添加了目标 c 文件并且它工作正常之后我需要在添加 swift 文件后添加一些 swift 文件 xcode 没有给我自动选项创建桥接 然后我关注了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];

如附图所示。

【问题讨论】:

  • 您导入 Swift 桥接文件并构建您的应用了吗?
  • 我已经提到我正在开发框架,而 Xcode 在框架中没有这个功能。
  • 你能显示完整的 swift 代码吗?
  • 是的,您可以看到粗体的“TestSwiftFile.swift”是 swift 文件,其中仅包含“import Foundation”行代码。因为我只是创建了文件,没有其他东西用于测试概念
  • 如果 Swift 中没有代码,就没有什么要导入的了?!

标签: ios objective-c swift xcode


【解决方案1】:

终于找到了解决办法。我做了以下更改。以下是您的框架中的待办事项列表。

Swift 类在 Objective C 类中的使用

  • 在 Swift 中在类名前使用 Open Keyword
  • 在 Swift 类的 Open 关键字之前使用 @objc 关键字
  • 在 Umbrella 文件中导入目标 c 类的所有标题 YourProject.h 正在使用 Swift 类。
  • 在目标中使用#import &lt;YourProjectName/YourProjectName-Swift.h&gt; c

我遵循 Apple 的混合搭配方法。

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

【讨论】:

  • 您能否详细说明“在 Umbrella 文件 YourProject.h 中导入所有使用 Swift 类的目标 c 类的标头。”或提供参考以供进一步阅读?
  • 实际上伞头文件是框架的“主”头文件。它的用途是您可以编写并且可以使用名称“YourProject.h”,因此您需要列出所有那些消耗 swift 类的目标 c 类的标头,并将所有这些标头导入伞形文件中。有意义吗?
  • 好的,谢谢。整个事情都是一场噩梦,不是基础知识,而是涉及到使用不同的框架以及它们与 Apple 框架交互的方式。
  • “在 Swift 中的类名前使用 Open Keyword”是什么意思。你能解释一下吗?
  • @TheAlphaGhost,基本上它的意思是你的 swift 类声明应该看起来像这样 "@objc open class TestSwiftFile: NSObject {}"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多