如何在swift中对数组中的不同结构模型进行排序?

时间:2017-12-01 17:23:33

标签: swift

  1. 我有unsortedArray [AnyObject]数组。我在其中添加了三个结构模型(通知模型,YouCard模型,欢迎模型)。所有这三个模型都包含字符串格式的“time_stamp”参数。 现在我无法根据time_stamp对模型进行排序。

  2. 我对快速功能感到不舒服。我尝试了一种解决方案,但它无法正常工作

    enter image description here

1 个答案:

答案 0 :(得分:1)

这是使用协议的经典案例,尽可能避免声明为[AnyObject][Any]的数组。

  • 创建协议,采用该协议的所有结构必须实现timestamp

    protocol TimeStampable {
        var timestamp : TimeInterval { get }
    }
    
  • 创建三个类

    struct NotificationCard : TimeStampable {
        var timestamp : TimeInterval = 34837465928
    }
    
    struct YouCard : TimeStampable {
        var timestamp : TimeInterval = 67837465928
    }
    
    struct WelcomeCard : TimeStampable {
        var timestamp : TimeInterval = 92837465928
    }
    
  • 而不是未指定的[AnyObject]将数组声明为[TimeStampable]

    let unsortedArray : [TimeStampable] = [YouCard(), WelcomeCard(), NotificationCard()]
    
  • 现在您可以对数组进行排序

    let res = unsortedArray.sorted{ $0.timestamp < $1.timestamp }
    

如果必须使用其他通用成员或函数,请将它们添加到协议声明中,并在结构中实现它们和/或使用协议扩展。