加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

无法使用JavaScriptCore中的Swift类

发布时间:2020-12-14 19:08:43 所属栏目:百科 来源:网络整理
导读:我想在 JavaScriptCore上下文中实例化一个Swift类. 我尝试了与Playground不同的语法,也尝试过Xcode 6.4(Swift 1.2)和Xcode 7 beta 3(Swift 2.0),但没有成功= – ( 也许我错过了什么. 在我在网上找到的更复杂的例子中,协议’create’函数被定义为’class func
我想在 JavaScriptCore上下文中实例化一个Swift类.

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

也许我错过了什么.

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

这是我的代码(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')')"

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读