使用Swift iOS的Javascriptcore框架将NSobject传递给javascript

Passing NSobject to javascript using Javascriptcore framework from Swift iOS

本文关键字:NSobject javascript 框架 Swift iOS Javascriptcore 使用      更新时间:2023-09-26

我正在开发一个自定义的cordova插件。我需要调用javascript方法从iOS(Swift)NSObject作为参数。

let methodToBeCalled = context.objectForKeyedSubscript("videoStreamAvailableForRendering")
    let valueReturnedFromMethod: JSValue = methodToBeCalled.callWithArguments([stream])
    println("valueReturnedFromMethod '(valueReturnedFromMethod.toObject())")

"stream"是我需要通过的对象。虽然传递字符串没有错误,但当我传递流对象时,我得到以下错误:

NSForwarding: warning: object 0x100f6f5e0 of class 'SwiftObject'没有实现methodSignatureForSelector:——麻烦了无法识别的选择器+[SwiftObject copyWithZone:]

我认为原因是因为stream需要成为NSObject的子类,或者它需要成为自动桥接到Objective C对象的类的实例。

查看这篇文章了解更多细节。String工作,因为String自动桥接到NSString

当你从Swift数组桥接到NSArray对象时,Swift数组中的元素必须是AnyObject兼容的。例如,[Int]类型的Swift数组包含Int结构元素。Int类型不是类的实例,但是因为Int类型桥接到NSNumber类,所以Int类型是AnyObject兼容的。因此,你可以将一个[Int]类型的Swift数组桥接到一个NSArray对象。如果Swift数组中的元素不是AnyObject兼容的,当你桥接到NSArray对象时就会出现运行时错误。