【问题标题】:How to iterate over array of Any如何迭代任何数组
【发布时间】:2019-05-26 15:17:27
【问题描述】:

我想知道如何迭代一组不同类型的对象。数组如下所示:

var messages: [Any] = [SentMessage(sent_text: "Halla", date_sent: "24.des", isSent: true, sending: false), RecievedMessage(profile_image: UIImage(named: "baseline_account_box_black_18pt")!, recieved_text: "Hei hva skjer?", date_recieved: "25.des", isRecieved: true)]

我尝试像这样转换迭代器:

for i in messages{

    guard let received = ReceivedMessage(i) else{
        return
    }


}

ReceivedMessagesSentMessages 都是结构体,如果需要查看更多代码,请询问。

【问题讨论】:

标签: swift iteration


【解决方案1】:

使用可选绑定:

guard let received = i as? ReceivedMessage

不要将messages 声明为[Any],而是让ReceivedMessageSentMessage 采用通用协议,然后messages 将是采用该协议的对象数组:

protocol Message {

}

struct SentMessage: Message {

}

struct ReceivedMessage: Message {

}

var messages: [Message]

【讨论】:

  • 我明白这一点,但如果我采用协议中的所有内容,我也可以只创建一个结构吗?
  • @EliasKnudsen 当然,最好使用布尔值来区分接收和发送的消息
  • 谢谢,创建不同的结构是愚蠢的,一个消息共享许多相似的属性,唯一的区别是它是发送还是接收。
  • 也许为消息的状态引入一个枚举?随着时间的推移,您可能会发现消息可能处于比发送和接收更多的状态
  • 感谢您的建议@Be
猜你喜欢
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 2013-09-25
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多