阅读 5

OC 与 混合开发的问题

使用WKScriptMessageHandler 时 遇到问题 , 专门用来 OC调用swift 方法的 项目名-Swift.h文件 , 出现 no name or protocal named 'WKScriptMessageHandler' 没有找到遵守WKScriptMessageHandler 这个协议

解决方法 尝试一

WKScriptMessageHandler 这个协议 ,不写在分类中 要 写在 类声明的 后面

class HomeViewController: UIViewController ,WKScriptMessageHandler{
}

复制代码

然后系统会自动加上 @objc

 @objc(userContentController:didReceiveScriptMessage:) 
internal func userContentController(_ userContentController: WKUserContentController,
 didReceive message: WKScriptMessage) {
}
复制代码

然而并没有乱用 , 然后我忽然想到 , 既然协议有问题, 我就去掉 协议就好了啊

OC 的机制是运行时,发送消息 , 人为的写分类只是为了 有智能提示, 可以很快的写出方法而已, 我去掉后 系统自然还是能找到 selector 的 然而还是我太天真 , 添加代理的时候 仍然会报错

完蛋了!!!!

最后的解决方法是 : 我不再使用 prefix 文件

注意

遇到类似 项目名-Swift.h文件出现的错误 一个是 可以将报错的方法 用 filePrivate 不暴露出来, 一个是 检查是否类型不兼容 OC 或可以 @objc 添加这个标识

关注下面的标签,发现更多相似文章
评论