2014-12-05 78 views
2

我是Swift/iOS的新手,一直致力于从JavaScript调用Swift代码的应用程序。网上没有太多的教程,其中很多来自Swift仍处于测试阶段时。无论如何,我的代码出现错误,我无法编译它,我想知道是否有任何人在JavaScript中调用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 {它说

类型 '视图控制器' 不符合协议 'WKScriptMessageHandler'。

任何帮助将不胜感激。

回答

4

我注意到,你的方法userContentController是:

func userContentController(userContentController: WKUserContentController!, 
    didReceiveScriptMessage message: WKScriptMessage!) 

它应该是:

func userContentController(userContentController: WKUserContentController, 
    didReceiveScriptMessage message: WKScriptMessage) 

(无自选原型!)。

如果您需要更多的帮助,请发表您的index.html源文件

+0

这么简单的东西太感谢你了!你也有链接到教程显示一些很好的例子在JavaScript到SWIFT? – 2014-12-05 15:06:54

+0

您是否检查过http://tetontech.wordpress.com/2014/06/13/swift-wkwebview-and-calling-from-javascript-to-swift/? – valfer 2014-12-05 15:20:15