Класс Objc не распознает класс Swift - PullRequest
0 голосов
/ 16 ноября 2018

Я не смог импортировать класс swift в свой целевой проект c, выполнив следующие действия:

Окружение:

Xcode: 10.0

Swift: 4.2

1 - Ctrl + N, чтобы сгенерировать новый файл swift

2 - Выберите «Создать заголовок моста» из вопроса xcode

3 - На цели -> настройки сборки, найдите «Упаковка» и повернитена «Определяет модуль»

4 - Импортировано #import «MyProjectModuleName-Swift.h» в моем файле objc .m

5 - Попытка вызова моего метода swift и, похоже, ничего не работает, яЯ не могу вызвать его, потому что мой класс .m не распознает мой файл .swift.

Что не так?

1 Ответ

0 голосов
/ 16 ноября 2018

Я пытался использовать быстрый класс внутри целевого проекта c и потратил много времени, пытаясь заставить его работать безуспешно.

Весь ответ не работал для меня, пока я не получил правопуть к моему Project-Swift.h.

Это был трюк, который спас мне жизнь.


Следуйте этим шагам, и у вас все получится!

1 - Создатьваш проект xcode

2 - Создайте новый файл .swift

3 - Появится диалоговое окно, убедитесь, что при появлении запроса выберите «Создать заголовок моста».

4- В Target -> настройки сборки, найдите «Packaging» и включите «Defines Module»

5 - В вашем быстром файле (образец)

import Foundation

@objcMembers

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

Здесь обратите внимание на @ objcMembers , который позволит классу objc распознавать swift класс!

Найдите его здесь

6 - В свой файл objc .m или .h импортируйте свой файлавтоматически сгенерированный файл Project-Swift.h на шаге 3

Моя цель состояла в том, чтобы импортировать его:

#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!"
    }
}

Надеюсь, это может помочь вам, ребята.

...