0

按照以下步骤,我无法在我的目标 c 项目中导入 swift 类:

环境:

Xcode: 10.0

斯威夫特:4.2

1 - Ctrl+N 生成一个新的 swift 文件

2 - 从 xcode 问题中选择“创建桥接头”

3 - 在 Target -> build settings,搜索“Packaging”并打开“Defines Module”

4 - 在我的 objc .m 文件中导入 #import "MyProjectModuleName-Swift.h"

5 - 尝试调用我的 swift 方法,但似乎没有任何效果,我无法调用它,因为我的 .m 类无法识别我的 .swift 文件。

怎么了?

4

1 回答 1

1

我试图在一个目标 c 项目中使用一个 swift 类,并花了很多时间试图让它工作但没有成功。

在我为我的 Project-Swift.h 找到正确的路径之前,所有答案都对我不起作用。

那是挽救我生命的诀窍。


按照这个步骤,你会成功的!

1 - 创建你的 xcode 项目

2 - 创建一个新的 .swift 文件

3 - 将出现一个对话框,请确保在出现提示时选择“创建桥接头”。

4 - 在 Target -> build settings,搜索“Packaging”并打开“Defines Module”

5 - 在您的 swift 文件中(示例)

import Foundation

@objcMembers

class MyClass: NSObject {
    public func test () -> String {
        return "Swift says hi to objc class!"
    }
}

这里注意@objcMembers,它会让objc类识别swift类!

在这里找到它

6 - 在您的 objc 类 .m 或 .h 文件中,在步骤 3 中导入您自动生成的 Project-Swift.h 文件

我的目标是导入它:

#import <Teste-Swift.h>

并不是:

#import "Teste-Swift.h"

就是这样,头痛后我得到了答案

所以最后,我的 .m 文件是这样的:

#import "ViewController.h"
#import <Teste-Swift.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //-------------        
    MySwiftClass *myswiftclass = [[MySwiftClass alloc] init];
    NSString *string = [myswiftclass test];
    NSLog(@"%@",string);
}


@end

我的 .swift 文件:

import Foundation

@objcMembers

class MySwiftClass: NSObject {
    public func test () -> String {
        return "Swift says hi second swift class!"
    }
}

我希望这可以帮助你们。

于 2018-11-16T18:18:44.457 回答