javascript - 从 JavaScript 调用 Swift

标签 javascript ios swift uiviewcontroller

我是 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/

相关文章:

javascript - 根据php中的特定颜色突出显示数据

ios - 使用 Decodeable swift 4.0 解析数据不读取数据 - Xcode

javascript - 在 for 循环中使用可变编号 "then"进行 Promise

javascript - gulp - 将参数传递给 runSequence 中调用的任务

iOS UITableView 仅对第一个可见单元格进行动画处理

ios - 在 SceneKit 中将形状添加到球体表面

JSON 序列化无法正常工作

swift - 在命令行中使用 WebView : found nil error while unwrapping

ios - HTML 特殊键显示在帖子描述中

javascript - 字符串化并解析对象文字