【发布时间】:2014-07-27 12:00:27
【问题描述】:
我有一个旧的 Objective-C 项目,我想调用新的 Swift 函数和对象,我创建了文件“<ProjectName>-Bridging-Header.h”和“<ProjectName>-Swift.h”
将函数从 Swift 调用到 Objective-C 对我来说很容易,但我有一个反向问题。
所以我创建了一个简单的类“System.Swift”
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
现在我尝试遵循文档 here 并在 <...>-Swift.h 文件中写了这个
@class System;
@interface System : NSObject
-(void)printSome;
@end
我已经将它导入到我的 Objective-C 类中。此时,在我的 Objective-C 代码的 Objective C 类(当前为 UIViewController)中,我尝试调用“printSome”方法:
- (void)viewDidLoad
{
[super viewDidLoad];
System * sis = [[System alloc] init];
[sis printSome];
//any additional setup after loading the view from its nib.
}
现在我有以下错误:
架构 i386 的未定义符号:“OBJC_CLASS$_System”, 参考自: “ObjectiveC_Class_That_Call_Swift_Object”中的 objc-class-ref.old:未找到架构 i386 的符号:错误:链接器 命令失败,退出代码为 1(使用 -v 查看调用)
【问题讨论】:
-
您有一个链接器错误。是不是:(1) Xcode 在命名 Objective-C 桥接头和为 Swift 代码生成的标头时使用您的产品模块名称而不是目标名称,或者 (2) 确保为那些导入 Objective-C 标头在将 Swift 生成的标头导入到 Objective-C .m 文件之前的类型,您想从中访问 Swift 代码?您的 Objective-C 代码中是否有:#import “ProductModuleName-Swift.h”?
-
是的,我已经阅读了文档并且“ProductModelName”的名称是正确的......在构建设置中存在一个错误,产品模型没有设置......我什至设置了它。 ..
-
@petert 你能更好地解释第二点吗?我写了我所做的一切......
-
问题已解决,我在我的项目调用中添加了一个新的 .h 文件
-Swift.h 但这不是必需的,因为即使我看不到它,编译器也会创建这个对象.我已经删除了我创建的新文件,现在一切运行良好。 Tnx 彼得 -
您可以回答自己的问题 - 这可能对其他人有所帮助。
标签: objective-c swift