JavascriptCore 不从类中导出方法

标签 javascript ios swift javascriptcore

我正在尝试从 swift 类的单例实例中调用方法。

这是我的协议(protocol):

@objc public protocol MyProtocol: JSExport {

    var name: String { get set }

    func sum(a:Int, b: Int) -> Int
}

这是我的类(class):

private let sharedInstance = MySingleton()

@objc public class MySingleton: NSObject, MyProtocol {

    // Singleton
    public class var sharedApp : MySingleton {

        return sharedInstance
    }    

    public var username: String

    override private init() {

        self.username = "Oscar"

        super.init()
    }

    public func sum(a: Int, b: Int) -> Int {

        return a + b
    }
}

我进行了一些测试。当我访问它传递的属性时:

func testName() {

    var virtualMachine = JSVirtualMachine()
    js = JSContext(virtualMachine: virtualMachine)

    var singleton: MySingleton = MySingleton.sharedApp

    self.context.setObject(
        singleton.self,
        forKeyedSubscript: "Singleton")

    let name = js.evaluateScript("Singleton.username").toString()

    XCTAssertTrue(name == "Oscar", "Name is not Colossal, was " + name); // PASS!!!!!
}

但是,当我调用一个方法时它失败了:

func testSum() {

    var virtualMachine = JSVirtualMachine()
    js = JSContext(virtualMachine: virtualMachine)

    var singleton: MySingleton = MySingleton.sharedApp

    self.context.setObject(
        singleton.self,
        forKeyedSubscript: "Singleton")

    let name = js.evaluateScript("Singleton.sum(3, 2);").toInt32()

    XCTAssertTrue(sum == 5, "Sum was " + String(sum)); // Fails. Says sum was 0
}

它仅在从 Javascript 对象读取/写入属性时有效,在调用方法时无效....

我做错了什么?

最佳答案

我刚刚找到了解决方案。试试这个。

func sum(a:Int, _ /* <-- make this argument unnamed */ b: Int) -> Int

JSExport 似乎还不支持命名参数。

关于JavascriptCore 不从类中导出方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29595190/

相关文章:

javascript - JQuery 不在 Chrome 扩展中执行 PHP

javascript - 如何使用 Javascript 创建重力效果?

ios - 使用 shouldPerformSegueWithIdentifier 时,必须点击按钮两次才能进入下一个 View

javascript - 当我只需要其中的 Checkbox 的 ng-click 时,如何不触发 TR 的 ng-click

javascript - 用于手机的条形码扫描器,用于表单中的网站

ios - 代理未调用协议(protocol)方法

ios - 如何在 SwiftUI 中显示 iPad 和纵向模式的侧边栏

ios - 应用程序打开启动屏幕但崩溃(在 iOS 设备上)

ios - 子类必须实现 PagerTabStripDataSource viewControllers(对于 :) method in XLPagerTabStripe library

ios - View 出现后 View 的背景颜色发生变化?