如何使用 swift 从 [Any] 访问密钥

How to access key from [Any] using swift

我正在使用 swift 开发应用程序,我正在集成 cometchat 遵循 link https://docs.cometchat.com/ios-sdk/quick-start/。所以我从服务器获取聊天记录。

现在我从服务器得到了两个(发送者消息和接收者消息)nsmutable数组值。

var firstArr = response!["history"]! as! NSMutableArray

   var secondArr = response!["history"]! as! NSMutableArray

我合并了两个 nsmuatblearray 值,得到的结果是:

 [
    {
        from = 1;
        id = 68;
        localmessageid = "46A9A5E5-FEEC-4588-B7D6-18E88BA68393_2";
        message = "ckeck messages";
       "message_type" = 10;
        old = 1;
        self = 1;
        sent = 1521185409000;
    }, 
    {
        from = 2;
        id = 69;
        localmessageid = "46A9A5E5-FEEC-4588-B7D6-18E88BA68393_1";
        message = "sent to thiyakarajan";
       "message_type" = 10;
        old = 1;
        self = 1;
        sent = 1521185410000;
    }
 ]

在响应中发送的键值被称为时间戳。

使用发送的键(时间戳)帮助我对数组进行升序排序 订单。

还有我要在 table 视图中加载消息值。

谢谢

像这样处理网络数据是一种非常糟糕的做法。特别是如果你想在你的应用程序中进一步使用这些数据。

  1. 您需要解析在 Dictionary 或您自己的数据结构中接收到的数据,以便安全地使用它。有很多方法可以做到这一点,包括 JSONSerializationCodable Protocol 甚至 SwiftyJSON
  2. 等外部库
  3. 解析后,您将拥有可以使用的对象,而无需将 Any 类型强制转换为预期类型,这会带来很多可选检查。因此,假设您有一个名为 Message 的结构,其中包含来自 JSON 的所有数据,在获取所有对象之后,您将拥有可以在应用程序中传递的整洁的 [Message] 数组。
  4. 要按某些属性对数组进行排序,您只需使用任何集合的默认函数 sorted(by:)。在你的情况下:sortedArray = myArray.sorted(by: {[=18=].sent < .sent})
  5. 现在您可以使用此数组作为 tableView 的数据源,使用 UITableViewDataSource 协议

很明显,您对 iOS 编程还很陌生,所以我建议您查找一些有关处理网络数据的教程。例如,您可以观看此 video,它几乎总结了上述所有内容。

像这样写代码

Save Swift Array
var firstArr : Array<Dictionary<String, Any>> = response!["history"]! as! Array<Dictionary<String, Any>>

Access valus
let strMessage : String  = fistArr[index]["message"] as! String

会起作用的..!

您可以使用 [[yourarray objectAtIndex:indexPath.row]objectForKey:@"message"] 等代码访问 TableView 的 cellforrowatindexpath 方法中的数组。通过使用此行,您可以在 indexPath 0 处访问数组消息的值。另外,根据时间戳对数组进行排序,请参考以下代码:

NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"sent" ascending: YES];
return [myArray sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];

我们在 ReadyUI 代码中使用了相同的方法。请参考我们的 ReadyUI 源代码,如果您需要其他帮助,请发送电子邮件至 support@cometchat.com。