为什么WebFrameLoadDelegate视为未申报?(Why is WebFrameLoadD

2019-10-20 19:45发布

我只具有基本的Cocoa应用程序WebView在其窗口。 所述WebKit.framework参考被加入到的Xcode 6的β6项目在OS X 10.9(小牛)。 我想知道什么时候WebView完成加载的页面。 所以,我创建了一个WebViewControllerDelegate类继承WebFrameLoadDelegate 。 这已经是哪里出现问题开始的地方:Xcode的告诉我关于Use of undeclared type 'WebFrameLoadDelegate' 。 有关堆栈溢出了这个问题 ,它不应该。 就像已经提到的, WebKit.framework由项目和引用WebKit在斯威夫特类文件导入模块。 我也看到了WebFrameLoadDelegate.h在Xcode中的左侧栏中的“头文件”文件夹,在下方WebKit.framework

所有罪恶的根源是线11在文件TestWebView/WebViewControllerDelegate.swift (I忘了删除我省略这里的评论),类声明和协议参考。

import WebKit

class WebViewControllerDelegate: WebFrameLoadDelegate {
    func didFinishLoadForFrame() {
        NSLog("didFinishLoadForFrame()")
    }
}

AppDelegate ,其完成所有设置:

import Cocoa
import WebKit

class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    @IBOutlet weak var webView: WebView!
    @IBOutlet weak var webViewControllerDelegate: WebViewControllerDelegate!

    func applicationDidFinishLaunching(aNotification: NSNotification?) {
        self.webView.frameLoadDelegate = self.webViewControllerDelegate
        self.webView.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: "https://stackoverflow.com/")))
    }

    func applicationWillTerminate(aNotification: NSNotification?) {}
}

欲了解更多信息,请看看我的代码我的公共仓库 ,我对这个问题的产生。

Answer 1:

WebFrameLoadDelegate是一个非正式的协议,所以你不能申报符合它。 从刚继承NSObject和实现所需的方法。

另外,还要注意的是,雨燕方法名是webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!)而不仅仅是didFinishLoadForFrame()

class WebViewControllerDelegate: NSObject { // WebFrameLoadDelegate
      override func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!) {
      NSLog("didFinishLoadForFrame()")
    }
}


文章来源: Why is WebFrameLoadDelegate considered as undeclared?