簡體   English   中英

如何快速使用CDVPluginResult()返回對象數組?

[英]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]);

但是,如何使用messageAsArraymessageAsArrayBuffermessageAsMultipart將數據作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM