无法在目标 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 AppDelegate 的参考