Elo*_*den 73 objective-c swift
我有个问题.我有一个旧的Objective C项目,我想调用新的Swift函数和对象,我创建了文件"-Bridging-Header.h"和"-Swift.h"
我很容易将函数从Swift调用到Objective C,但我有一个反向问题.
所以我创建了一个简单的类"System.Swift"
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
Run Code Online (Sandbox Code Playgroud)
现在我已经尝试按照这里的文档和<...> - Swift.h文件内部写了这个
@class System;
@interface System : NSObject
-(void)printSome;
@end
Run Code Online (Sandbox Code Playgroud)
我已经在Objective C Class中导入了它.此时,在我的Objective C Code的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.
}
Run Code Online (Sandbox Code Playgroud)
现在我有以下错误:
架构i386的未定义符号:"_ OBJC_CLASS _ $ _ System",引用自:"ObjectiveC_Class_That_Call_Swift_Object"中的objc-class-ref .o ld:未找到架构i386 clang的符号:错误:链接器命令失败,退出代码为1(使用-v看到调用)
有人能帮帮我吗?
关心所有.
Elo*_*den 44
问题解决了,我之前.h
在我的Objective-C类中创建并包含了一个新文件,<ProductModuleName>-Swift.h
但正如我后来发现的那样,这一步不是必需的,因为编译器会创建必要的文件不可见.
只需<ProductModuleName>-Swift.h
在课堂上加入即可.
Svi*_*ana 35
对了谢谢
这很奇怪,但它会起作用
1) Add @objc to Swift class
2) Add in .m
#import "(ProjectName)-Swift.h"
3) Call from .h
@class SwiftClass;
4)On SwiftClass
click "Command" + Left Click (Apple Documantation)
5) To see "-Swift.h" -> click "Command" + Left Click
Run Code Online (Sandbox Code Playgroud)
App将在-Swift.h中为此类生成接口
示例:SWIFT_CLASS("_ TtC10Project17220PLHelper")@interface PLHelper
小智 29
假设我们有ProjectName"MyFirstProjectOnSwift"和swift类名"mySwiftClass",而objectiveC类是"MyObjectiveCLass"
以下步骤是: -
在"MyObjectiveCLass.m"中添加#import"MyFirstProjectOnSwift-Swift.h"
在MyObjectiveCLass.h中添加@class mySwiftClass;
然后在MyObjectiveCLass.m中
mySwiftClass*myClass = [mySwiftClass new]; {在任何想要调用swift方法的方法中都可以调用此类.}
[myClass methodName];
Dar*_*kas 11
检查-swift.h文件,该文件在objective-C中的.m文件中有导入:
#import <YourProjectName-Swift.h>
Run Code Online (Sandbox Code Playgroud)
单击该行,然后单击鼠标左键 - 跳转到定义.
应自动包含此文件,而不是手动包含.
对于任何偶然发现这篇文章以及其他答案不起作用的人来说,有一点额外的提示:您可能还必须声明您的 Swift 类为“public”。
例子:
@objc public class MySwiftClass: NSObject {
归档时间: |
|
查看次数: |
79198 次 |
最近记录: |