Импортирование быстрой структуры в цель-проект

Я импортирую фреймворк 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.

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

Если вы ранее настроили 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;

[Больше примеров здесь]

Другие вопросы по тегам