gpt4 book ai didi

javascript - 无法使用来自 JavaScriptCore 的 Swift 类

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:04 25 4
gpt4 key购买 nike

我希望在 JavaScriptCore 上下文中实例化一个 Swift 类。

我在 Playground 上尝试了不同的语法,还在 Xcode 6.4 (Swift 1.2) 和 Xcode 7 beta 3 (Swift 2.0) 上尝试过,但没有成功 =-(

也许我遗漏了什么。

在我在网上找到的更复杂的示例中,协议(protocol)“create”函数被定义为“class func”,但编译器拒绝这种语法,告诉它“类方法只允许在类中使用;使用‘static’来声明一个静态方法”...所以我做到了。

这是我的代码(OS X 10.10.4 - Xcode 6.4)。我使用 Playground :

//: 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')')"

最佳答案

这适用于 XCode 8.2.1 和 swift3(我打赌这与 Swift 3 中的新方法名称/标签管理有关):

context.evaluateScript("Person.createWithName('Mike')")

关于javascript - 无法使用来自 JavaScriptCore 的 Swift 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31616670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com