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

Posted

技术标签:

【中文标题】使用 Swift iOS 中的 Javascriptcore 框架将 NSobject 传递给 javascript【英文标题】:Passing NSobject to javascript using Javascriptcore framework from Swift iOS 【发布时间】:2015-05-19 10:36:49 【问题描述】:

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

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

stream”是我需要传递的对象。传递字符串时没有错误,但是当我传递流对象时出现以下错误:

NSForwarding: 警告: 'SwiftObject' 类的对象 0x100f6f5e0 没有实现 methodSignatureForSelector: -- 前面的麻烦 无法识别的选择器 +[SwiftObject copyWithZone:]

帮帮我...

【问题讨论】:

【参考方案1】:

我认为原因是因为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 对象时会发生运行时错误。

【讨论】:

以上是关于使用 Swift iOS 中的 Javascriptcore 框架将 NSobject 传递给 javascript的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中OC和swift的对比

使用 Swift 从 iOS 中的 PhotoLibrary 中选择视频

iOS 15 中的 Swift 和 SwiftUI

iOS 11中的imageView使用Swift

ios开发中的Swift面向对象

使用 Swift 4 关闭 iOS 中的所有模式