Swift & ObjC 桥 - 找不到“WKNavigationDelegate”的协议声明

Posted

技术标签:

【中文标题】Swift & ObjC 桥 - 找不到“WKNavigationDelegate”的协议声明【英文标题】:Swift & ObjC bridge - cannot find protocol declaration for "WKNavigationDelegate" 【发布时间】:2019-07-01 05:02:14 【问题描述】:

我看到有很多关于 Swift 和 Objective-C 桥的问题,包括 this one、this one 和 this one...。但到目前为止,它们都没有帮助到我。

添加 WKNavigationDelegate 和 WKScriptMessageHandler 时,编译器失败并显示消息“找不到协议声明”。

项目-Brigding-Header.h

#import <WebKit/WebKit.h>
#include "xyz.h"

我已在target &gt; Build Phases 下将WebKit.framework 添加到Link Binary With Libraries。并对构建设置进行了更改。

Defines Module : YES
Always Embed Swift Standard Libraries : YES
Install Objective-C Compatibility Header : YES

我是否需要做其他事情才能让它发挥作用?

【问题讨论】:

尝试导入#import @ShauketSheikh 谢谢,但没有运气:( 然后在桥头类中导入你的webkit 【参考方案1】:

为什么在桥接头中使用#import &lt;WebKit/WebKit.h&gt;? 只需在 swift 文件的顶部添加:

import WebKit 

仅适用于使用 Objective-C 编写的应用程序内部类的桥接头。WebKit 是一个模块(在 swift 的术语中)。P.S. 还要从桥接头中删除#import。

【讨论】:

尝试使用来自 Objective-C/C++ 代码的 WKWebkit 相关变量等。但显然导入 WebKit.h 不是解决方案.. 我已经创建了示例项目,并且在导入 WebKit 时没有问题。在 Objective-C++ 中我使用“#import ”,在 Swift 文件中我使用“import WebKit”。一切正常。您可以在尝试启动 WKWebView 的位置添加导入代码和代码吗? 也许有循环引用什么的。这是别人用 ObjC 和使用 C 库编写的旧项目。在发布问题后查看它,我认为通过存储在 AppDelegate 中的变量调用 webview 方法不是一个好主意,这就是编译器找不到 WKWebView 协议的地方。 谢谢@Andrew 我会重构这样我就不需要调用 webview 方法了。

以上是关于Swift & ObjC 桥 - 找不到“WKNavigationDelegate”的协议声明的主要内容,如果未能解决你的问题,请参考以下文章

Xcode中如何快速创建一个Objc与Swift桥接的头文件

UICollectionView:ObjC Apple 示例代码到 Swift 转换(找不到成员)

可以在 Obj C 中链接,找不到符号,也不会在 Swift 中链接

桥接头文件找不到导入的 Objective-C 项目

桥接头文件找不到导入的 Objective-C 项目

如何将一个以闭包作为参数的函数桥接到 objc