【问题标题】:How to export method of inner class using JSExport如何使用 JSExport 导出内部类的方法
【发布时间】:2016-02-08 08:40:24
【问题描述】:

我有一个类,它的方法和属性是使用 JSExport 导出的。在正常情况下,它运作良好。但是如果该属性是某个内部类的类型,则无法从javascript中访问。

以下是我正在使用的类:

Person.swift

import Foundation
import JavaScriptCore


@objc
protocol PersonJavaScritMethod : JSExport {
    var testProperty : OuterClassPersonal.Personal? { get set }
    func sayHello(name1:String)
}
class Person : NSObject, PersonJavaScritMethod {
    var name : String!
     var testProperty:OuterClassPersonal.Personal?

    init(name:String) {
        testProperty = OuterClassPersonal.Personal()
        super.init()
        self.name = name
    }

    class func create(name : String) -> Person {
        return Person(name: name)
    }

    func sayHello(name1:String) {
        println("Hello \(name) \(name1)")
    }
}

Personal.swift

import Foundation
import JavaScriptCore

@objc
protocol PersonalJavaScritMethod : JSExport {
     func getNNN()
}

class OuterClassPersonal:NSObject,JSExport{


    class Personal:NSObject,PersonalJavaScritMethod {
        func getNNN(){
            println("Hip Hip Hurray")
        }
    }
}

JavaScript.swift

import Foundation
import JavaScriptCore
class Javascript {


    let context = JSContext()

    func evaluateScript() {
        context.exceptionHandler = { context, exception in
            println("❌ Error in Javascript: \(exception) ");
        }

        var  p1:Person = Person(name: "Luitel")
        context.globalObject.setObject(p1, forKeyedSubscript: "Person1")
        context.evaluateScript("Person1.sayHello('sdf') \n ")

        var result =  context.evaluateScript("Person1.testProperty.getNNN() \n")
        println("\(result.toString())")
    }

}

当我运行 evaluateScript() 方法时,我在控制台中得到如下输出,

Hello Luitel sdf ❌ Javascript 错误:TypeError: undefined is not a 函数(评估'Person1.testProperty.getNNN()') 未定义

我想访问 Personal Class 的 getNNN() 方法。在这里,如果getNNN()是OuterClassPersonal类的方法,而OuterClassPersonal实现了PersonalJavaScriptMethod,则可以正常工作。

问题是,如何从 Javascript 访问内部类“Personal”的方法?

【问题讨论】:

    标签: ios swift javascriptcore


    【解决方案1】:

    似乎没有办法将内部类函数导出到 javascript。我将内部类(个人)移出并创建了独立类并且它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2018-10-08
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      相关资源
      最近更新 更多