2017-08-16 64 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