Можно ли вызвать целевой метод делегата приложения C из класса Swift того же проекта? - PullRequest
0 голосов
/ 27 апреля 2019

Я объединяю свой Swift проект с уже существующим Objective-C кодом. Мне нужно вызвать некоторые важные методы класса Swift из объективного делегата приложения C. Я перепробовал все методы, приведенные в сети, но это было бесполезно. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 27 апреля 2019

Да, это возможно, но с некоторыми ограничениями.

Вы можете использовать только те классы, которые унаследованы от NSObject, с открытым атрибутом и помечены @objc. В коде Objective-C вы должны импортировать файл «ProductModuleName-Swift.h», сгенерированный компилятором.

Вот пример класса Swift:

import Foundation

@objc public class ExampleClass: NSObject {
    @objc public var someInstanceProperty = "Property"

    @objc public func someFunction() {
        print("Some function")
    }
}

Обратите внимание, что этот класс унаследован от NSObject и имеет атрибуты @objc и public. После команды + B вы можете взглянуть на сгенерированный заголовок моста через редактор Assistance: bridge-header

Затем вы должны импортировать заголовок моста в ваш класс Objective-C.

#import "ProductModuleName-Swift.h"

И тогда вы можете использовать свой класс Swift в коде Objective-C, как и любой другой класс Objective-C:

__auto_type const someClass = [ExampleClass new];
[someClass someFunction];
NSLog(@"%@", someClass.someInstanceProperty);

Вот дополнительная информация от Apple: Импорт Swift в Objective-C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...