2017-08-16 63 views
2

我编译数据的成员:结构的排序阵列通过使用以下结构的每个

struct Nursing { 

var leftTime: Double 
var rightTime: Double 
var submissionTime: Date 

} 

struct Bottle { 

var bottleQuantity: Double 
var bottleUnits: String 
var submissionTime: Date 

} 

struct Puree { 

var pureeQuantity: Double 
var pureeType: String 
var pureeUnits: String 
var submissionTime: Date 

} 

然后,我创建每种类型的使用在该应用的别处数据的数组。

var nursingArray = [Nursing]() 
var bottleArray = [Bottle]() 
var pureeArray = [Puree]() 

然后,我筛选每个数组,只查看最近一天发生的条目。

let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date()) 
    var todayBottleArray = bottleArray.filter({ ($0.submissionTime > yesterday!) }) 
    var todayNursingArray = nursingArray.filter({ ($0.submissionTime > yesterday!) }) 
    var todayPureeArray = pureeArray.filter({ ($0.submissionTime > yesterday!) }) 

最后它们都被组合成一个未排序的数组。

var unsortedTodayArray: [Any] = [] 

    unsortedTodayArray.append(todayBottleArray) 
    unsortedTodayArray.append(todayNursingArray) 
    unsortedTodayArray.append(todayPureeArray) 

这里的问题......虽然我知道他们是不相关的,在submissionTime属性出现在所有三个。如何通过submissionTime排序unsortedTodayArray

回答

3

你可以让你的结构符合相同的协议。类似...

protocol SubmissionTimeable { 
    var submissionTime: Date { get set } 
} 

struct Nursing: SubmissionTimeable { 

    var leftTime: Double 
    var rightTime: Double 
    var submissionTime: Date 
} 

struct Bottle: SubmissionTimeable { 

    var bottleQuantity: Double 
    var bottleUnits: String 
    var submissionTime: Date 
} 

struct Puree: SubmissionTimeable { 

    var pureeQuantity: Double 
    var pureeType: String 
    var pureeUnits: String 
    var submissionTime: Date 
} 

然后让你的未排序数组成为协议数组。

let unsortedArray = [SubmissionTimeable]() 

然后你可以使用submissionTime对数组进行排序。

+0

完美!这是一个很好的答案。 – adev