![](/img/trans.png)
[英]Objects are not valid as a React child. If you meant to render a collection of children, use an array instead. How to return it?
[英]How do you use CDVPluginResult() in swift to return an array of Objects?
我正在按照以下使用swift創建cordova插件的方法進行操作: http : //moduscreate.com/writing-a-cordova-plugin-in-swift-for-ios/
我的版本似乎正常工作-我可以使用CDVPluginResult()
將正確的數據返回到JS應用程序,但是我必須先在ios
對數據進行序列化,然后在JS中對JSON.parse
進行序列化。
// swift
pluginResult = CDVPluginResult(
status: CDVCommandStatus_OK,
messageAsString: data.toJSON()
)
self.commandDelegate!.sendPluginResult(
pluginResult,
callbackId: command.callbackId
)
// JS
var successCallback = function (result) {
try {
var data = JSON.parse(result);
callback(null, data);
}
catch (err) {
callback(err, result);
}
};
var errorCallback = function (err) { return callback(err, undefined); };
exec(successCallback, errorCallback, "myPlugin", "getData", [arg0]);
但是,如何使用messageAsArray
或messageAsArrayBuffer
或messageAsMultipart
將數據作為object[]
返回給JS
? 似乎沒有任何作用...
例:
class MyObj: NSObject, NSCoding {
let uuid: String
// see: https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/Lesson10.html
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.uuid, forKey: "uuid")
}
required init?(coder aDecoder: NSCoder) {
guard
let uuid = aDecoder.decodeObjectForKey("uuid") as! String?
else {
return nil
}
self.uuid = uuid
super.init()
}
required init(uuid: String) {
self.uuid = uuid
super.init()
}
}
var data : [MyObj] = [...]
pluginResult = CDVPluginResult(
status: CDVCommandStatus_OK,
// messageAsString: toJSON(data)
// How do I return swift [MyObject] as JS object[]?
messageAsArray: data.map({o in NSKeyedArchiver.archivedDataWithRootObject(o))
)
使用messageAs參數返回
類型擦除的Swift字典中的JSON對象: [AnyHashable : Any]
來自(字典的)Swift數組的(對象的)JSON數組: [[AnyHashable : Any]]
例:
let foo = ["foo": 123] as [AnyHashable : Any]
let bar = ["bar": 234] as [AnyHashable : Any]
let baz = ["baz": 456] as [AnyHashable : Any]
let array = [foo, bar, baz]
let pluginResult = CDVPluginResult(
status: CDVCommandStatus_OK,
messageAs: array
)
在瀏覽器回調中返回對象[{foo:123}, {bar:234}, {baz:456}]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.