Импортирование быстрой структуры в цель-проект
Я импортирую фреймворк Swift в проект target-c следующим образом:
@import MyFramework;
Проблема в том, что только некоторые из классов распознаются классом, который я импортирую.
Класс, который признан:
public class RecognizedClass:UIViewController, WKNavigationDelegate, WKScriptMessageHandle
{ ... }
Класс, которого нет:
public class VeediUtils
{ ... }
Они оба общедоступны, так почему первый признается в рабочей области, а другой нет?
Также я вижу в заголовочном файле MyFramework-Swift.h, что класс
@interface RecognizedClass : UIViewController <WKNavigationDelegate, WKScriptMessageHandler>
Появляются, а другой нет
Это почему?
Также отметим, что эта же процедура работает, когда я импортирую фреймворк Swift в проект Swift.
3 ответа
Чтобы получить доступ к классу swift в objc, который не унаследован от NSObject, вам необходимо:
@objc публичный класс VeediUtils
Класс или протокол Swift должны быть помечены атрибутом @objc, чтобы быть доступными и используемыми в Objective-C. Этот атрибут сообщает компилятору, что этот фрагмент кода Swift доступен из Objective-C. Если ваш класс Swift является потомком класса Objective-C, компилятор автоматически добавит для вас атрибут @objc.
Если вы ранее настроили Project для интеграции со Swift и хотите использовать Swift Dynamic Framework, вы должны импортировать его следующим образом (замените {value} соответствующими именами в зависимости от вашего Project):
#import <{MyFramework}/{MyFrameworkMainClass}-Swift.h>
#import "{YourProjectTargetName}-Swift.h"
Вы должны добавить @objc
к объявлению VeediUtils
класс, или сделать его наследовать от NSObject
, В противном случае он не будет виден для Objective-C.
В твоем случае, RecognizedClass
признается, потому что это подкласс UIViewController
, который является подклассом NSObject
,
Использование классов Swift в Objective-C
Если вы собираетесь импортировать код в App Target (смешивание Objective-C и Swift в одном проекте), вам следует использовать следующую строку импорта #import "<#YourProjectName#>-Swift.h"
предоставить код Swift коду Objective-C [Смешивание кода Swift и Objective-C в проекте]
В этом посте я опишу, как импортировать фреймворк Swift в код Objective-C.
Потребитель Objective-C -> Динамическая структура Swift
Xcode версии 10.2.1
Создайте фреймворк Swift
следить Create Swift framework
Раскройте Swift API. Чтобы использовать функции Swift из Objective-C [О программе]
Потребитель Objective-C со статической библиотекой Swift
следить Using Swift framework
Импортировать модуль в клиентский код Objective-C [имя_модуля]
@import module_name;