我是 Swift/iOS 的新手,一直在开发一个从 JavaScript 调用 Swift 代码的应用程序。网上的教程不多,而且很多都是 Swift 还处于测试阶段时的教程。无论如何,我的代码出现错误,无法编译它,我想知道在从 JavaScript 调用 swift 代码时是否有人有任何提示和最佳实践。
这是我的代码
import UIKit
import WebKit
class ViewController: UIViewController, WKScriptMessageHandler {
@IBOutlet var containerView : UIView! = nil
var webView: WKWebView?
override func loadView() {
super.loadView()
var contentController = WKUserContentController();
var userScript = WKUserScript(
source: "redHeader()",
injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
forMainFrameOnly: true
)
contentController.addUserScript(userScript)
contentController.addScriptMessageHandler(
self,
name: "callbackHandler"
)
var config = WKWebViewConfiguration()
config.userContentController = contentController
self.webView = WKWebView(frame: self.view.frame, configuration: config)
self.view = self.webView!
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var url = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("index", ofType: "html")!)
var req = NSURLRequest(URL: url!)
self.webView!.loadRequest(req)
}
func userContentController(userContentController: WKUserContentController!,didReceiveScriptMessage message: WKScriptMessage!) {
if(message.name == "callbackHandler") {
println("JavaScript is sending a message \(message.body)")
} }
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
错误在 class ViewController: UIViewController, WKScriptMessageHandler {
上,它说
Type 'ViewController' does not conform to protocol 'WKScriptMessageHandler'.
如有任何帮助,我们将不胜感激。
最佳答案
我注意到您的方法 userContentController
是:
func userContentController(userContentController: WKUserContentController!,
didReceiveScriptMessage message: WKScriptMessage!)
应该是:
func userContentController(userContentController: WKUserContentController,
didReceiveScriptMessage message: WKScriptMessage)
(没有可选项!在原型(prototype)中)。
如果您需要更多帮助,请发布您的index.html
源文件
关于javascript - 从 JavaScript 调用 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27317978/