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

时间:2018-03-16 08:06:35

标签: ios swift sorting nsmutablearray any

我正在使用swift开发一个应用程序,在我的链接https://docs.cometchat.com/ios-sdk/quick-start/之后整合了一个Cometchat。所以我从服务器上获取聊天记录。

现在我从服务器获得了两个(发件人消息和接收者消息)nsmutablearray值。

即,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;
    }
 ]

在响应中,发送的密钥值被称为时间戳。

使用该发送密钥(timestamp)帮助我按升序排序数组    顺序。

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

由于

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

使用像这样的网络数据是一种非常糟糕的做法。特别是如果您想在应用程序内部进一步使用此数据。

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

    很明显,您对iOS编程很陌生,所以我建议您查找一些有关使用网络数据的教程。你可以看一下video,例如,它几乎总结了上面提到的所有内容。

答案 2 :(得分:0)

像这样的代码

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

会工作..!