如何声明继承的内置协议,以便可以从另一个框架或应用程序导入它?

时间:2019-05-10 07:50:45

标签: ios objective-c swift objective-c++ language-interoperability

由于出现以下错误,我无法从其他应用程序/框架调用此快速文件。

  

“未知的类名'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 :(得分:0)

我在“项目”设置中尝试了与您同样的HSIWKJavascriptBridge快速班。我可以在我的Obj-C文件中使用此类,没有任何问题。

由于WKScriptMessageHandlerprotocol,因此不会在快速编译器生成的代码中将其向前声明为其他类(WKUserContentControllerWKScriptMessage)。

请确保在您的Swift文件中添加了import WebKit