如何使用 JSExport 导出内部 class 的方法
How to export method of inner class using JSExport
我有一个 class,其方法和属性是使用 JSExport 导出的。在正常情况下,它运作良好。但是如果属性是某个内部class的类型,那么就不能从javascript.
访问到
以下是我正在使用的 classes:
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 ❌ Error in Javascript: TypeError: undefined is not a
function (evaluating 'Person1.testProperty.getNNN()')
undefined
我想访问个人 Class 的方法 getNNN()。在这里,如果 getNNN() 是 OuterClassPersonalclass 的方法并且 OuterClassPersonal 实现了 PersonalJavaScriptMethod,则它可以正常工作。
问题是,如何从 Javascript 访问内部 class "Personal" 的方法?
似乎无法将内部 class 函数导出到 javascript。我将内部的 class(个人)移出并创建了独立的 class 并且它起作用了。
我有一个 class,其方法和属性是使用 JSExport 导出的。在正常情况下,它运作良好。但是如果属性是某个内部class的类型,那么就不能从javascript.
访问到以下是我正在使用的 classes:
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 ❌ Error in Javascript: TypeError: undefined is not a function (evaluating 'Person1.testProperty.getNNN()') undefined
我想访问个人 Class 的方法 getNNN()。在这里,如果 getNNN() 是 OuterClassPersonalclass 的方法并且 OuterClassPersonal 实现了 PersonalJavaScriptMethod,则它可以正常工作。
问题是,如何从 Javascript 访问内部 class "Personal" 的方法?
似乎无法将内部 class 函数导出到 javascript。我将内部的 class(个人)移出并创建了独立的 class 并且它起作用了。