2016-02-08 10 views
7

JSExportを使用してメソッドとプロパティをエクスポートするクラスが1つあります。通常の場合、正常に動作します。しかし、プロパティが内部クラスの型であれば、javascriptからアクセスすることはできません。JSExportを使用して内部クラスのメソッドをエクスポートする方法

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

を:後

は、私が使用していたクラスです私はevaluateScript()メソッドを実行すると、私は、コンソールに以下のような出力を得る

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())") 
    } 

} 

Hello Luitel sdf ❌ Error in Javascript: TypeError: undefined is not a function (evaluating 'Person1.testProperty.getNNN()') undefined

、私は個人的なクラスのメソッドgetNNN()をアクセスします。ここで、getNNN()がOuterClassPersonalクラスのメソッドで、OuterClassPersonalがPersonalJavaScriptMethodを実装している場合、それは正しく動作します。

質問は、どうやってJavascriptから内部クラス "Personal"のメソッドにアクセスできますか?

答えて

2

内部クラス関数をjavascriptにエクスポートする方法はありません。私はインナークラス(パーソナル)を外に出して、独立したクラスを作りました。

関連する問題