我希望在JavaScriptCore上下文中实例化一个Swift类。
我尝试使用Playground的不同语法,也尝试使用Xcode 6.4(Swift 1.2)和Xcode 7 beta 3(Swift 2.0),但没有成功= - (
也许我错过了什么。
在我在网上找到的更复杂的例子中,协议'创建'函数被定义为一个类函数'但编译器拒绝这种语法告诉"类方法只允许在类中;使用'静态'声明一个静态方法" ...所以我做了。
这是我的代码(OS X 10.10.4 - Xcode 6.4)。我用了一个游乐场:
//: Playground - noun: a place where people can play
import Foundation
import JavaScriptCore
let context = JSContext()
// errors handling
context.exceptionHandler = { context, exception in
println("JS Error: \(exception)")
}
@objc
protocol PersonJavaScritMethod : JSExport {
func sayHello()
static func create(name : String) -> Person
}
class Person : NSObject, PersonJavaScritMethod {
var name : String!
init(name:String) {
super.init()
println("# init done #")
self.name = name
}
class func create(name : String) -> Person {
return Person(name: name)
}
func sayHello() {
println("Hello \(name)")
}
}
let aPerson = Person.create("Toto")
// -> ok : console output : "# init done #"
aPerson.sayHello()
// -> ok : console output : "Hello Toto"
context.globalObject.setObject(Person.self, forKeyedSubscript: "Person")
context.evaluateScript("Person.create('Mike')")
// -> not ok : console output :
// "JS Error: TypeError: undefined is not a function (evaluating 'Person.create('Mike')')"
答案 0 :(得分:1)
这适用于XCode 8.2.1和swift3(我打赌这与Swift 3中的新方法名称/标签管理有关):
context.evaluateScript("Person.createWithName('Mike')")