Как объявить унаследованный встроенный протокол, чтобы его можно было импортировать из другого фреймворка или приложения? - PullRequest
0 голосов
/ 10 мая 2019

Я не могу вызвать этот файл swift из другого приложения / фреймворка, так как получаю приведенную ниже ошибку.

"Неизвестное имя класса 'WKScriptMessageHandler'"

Это mySwift.swift, который я объявил в рамках.

@objcMembers public class HSIWKJavascriptBridge : NSObject, WKScriptMessageHandler{
    public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "test", let messageBody = message.body as? String {
            print(messageBody)
        }
    }
}

swiftкомпилятор сгенерировал этот код автоматически при компиляции.

@class WKUserContentController;
@class WKScriptMessage;

SWIFT_CLASS("_TtC5MyFwk21HSIWKJavascriptBridge")
@interface HSIWKJavascriptBridge : NSObject <WKScriptMessageHandler>
- (void)userContentController:(WKUserContentController * _Nonnull)userContentController didReceiveScriptMessage:(WKScriptMessage * _Nonnull)message;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end

Теперь ошибка в том, что WKScriptMessageHandler не объявляется автоматически, как

@class WKUserContentController;
@class WKScriptMessage;

, из-за чего я не могу использовать фреймворк.

1 Ответ

0 голосов
/ 10 мая 2019

Я пытался использовать тот же класс HSIWKJavascriptBridge swift в моей настройке проекта.Я смог использовать этот класс в моих файлах Obj-C без каких-либо проблем.

Поскольку WKScriptMessageHandler является protocol, оно не будет объявлено как другие классы (WKUserContentController, WKScriptMessage) в коде, созданном быстрым компилятором.

Пожалуйста, убедитесь, что import WebKit добавлено в ваш файл Swift.

...