Класс Objc не распознает класс Swift

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

Окружающая среда:

Xкод: 10.0

Свифт: 4.2

1 — Ctrl+N для создания нового файла Swift

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

3 - On Target -> настройки сборки, найдите «Упаковка» и включите «Определяет модуль».

4 - Импорт #import "MyProjectModuleName-Swift.h" в мой файл objc .m

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

Что не так?


person Jhonsore    schedule 16.11.2018    source источник


Ответы (1)


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

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

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


Следуйте этим шагам, и вы добьетесь успеха!

1 - Создайте свой проект xcode

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

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

4 - On Target -> настройки сборки, найдите «Упаковка» и включите «Определяет модуль».

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 импортируйте автоматически сгенерированный файл 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!"
    }
}

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

person Jhonsore    schedule 16.11.2018