无法在目标 C 中调用 swift 函数。获取 NSObject 的错误接口声明

Posted

技术标签:

【中文标题】无法在目标 C 中调用 swift 函数。获取 NSObject 的错误接口声明【英文标题】:Unable to call swift function in objective C. Getting error interface decleration for NSObject 【发布时间】:2016-02-24 04:56:08 【问题描述】:

在目标 c 文件中调用 swift 函数时出错。 我已经创建了“-Swift.h”文件。

我已经创建了“.swift”文件。我的代码是

import Foundation
@objc class className : NSObject 
@objc func someFunc(sender: AnyObject) 
//Some code


我已经创建了“-Swift.h”头文件。我的代码是

#ifndef ProjectName_Swift_h
#define ProjectName_Swift_h
#endif /* ProjectName_Swift_h */
@class className;
@interface className : NSObject
-(void)someFunc;
@end

在我的目标 C“.m”文件中调用 swift 函数。

#import "XXX-Swift.h"

- (void)viewDidLoad

    [super viewDidLoad];
    className *obj = [[className alloc]init];
    [obj someFunc];

现在“XXX-Swift.h”文件中出现错误。

错误:找不到“NSObject”的接口声明,“className”的超类。

【问题讨论】:

【参考方案1】:

删除你创建的以-Swift.h结尾的文件,该文件是Xcode自动生成的。

如果你命令点击#import "XXX-Swift.h",你可以查看Xcode生成的版本(成功构建后)

如果您进入构建设置并搜索SWIFT_OBJC_INTERFACE_HEADER_NAME,您可以看到文件名。

【讨论】:

我已经这样做了,但是遇到了错误。在“.swift”文件中错误:“预期';'***声明和未知类型名称'import'"。 .swift 文件中的代码缺少最终的 这是否回答了您的问题?你现在遇到什么错误? 这对我有帮助。但不完全。我通过反复试验找到了解决方案。终于完成了。【参考方案2】:

你必须创建桥接头文件并在那里导入你的 swift 文件。

使用这个链接,它会帮助你

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

【讨论】:

检查这个链接,你得到你的解决方案***.com/questions/24102104/… 为了访问目标 c 中的 swift 代码,我认为不需要创建桥接头 header.h。我刚刚创建了 -swift.h,即使我尝试遇到同样的错误 查看苹果文档,我在上面给出了链接,它将解决您的问题。【参考方案3】:

我发现手动创建 -Bridging-header 文件和 Xcode 自动生成 -Bridging-header 文件之间的区别。我删除了 -Swift.h 文件并手动创建了 -Bridging-header 文件。添加 -Bridging-header(Xcode 生成一个)文件。项目构建成功后自动创建-Swift.h文件。

【讨论】:

凯西的回答是正确的。为什么要写这个然后给自己正确的答案??? -1 你是对的,但我的方法是这样的,并且完全成功了。

以上是关于无法在目标 C 中调用 swift 函数。获取 NSObject 的错误接口声明的主要内容,如果未能解决你的问题,请参考以下文章

无法在目标 c 中使用类(swift)

无法在目标 c 中使用类(swift)

在目标 c 中调用 Swift 完成处理程序

我如何从目标 c 代码中获取 Swift AppDelegate 的参考

如何将 NSData 参数传递给在 swift 3 中调用的目标 c 方法?

无法重新生成桥头以在目标 C 中使用 swift