我正在學習在SWIFT中編程,並且正在做我的第一個應用程序作爲項目。我正在用一個結構數組作爲數據做一個圖形,但是我想過濾它並只繪製用戶需要查看的圖形。我正在使用.filter
函數,並且它可以很好地過濾包含給定Integer作爲變量的元素。但在日期部分,我無法使其工作,我希望用戶能夠選擇一個日期範圍;這是代碼我實際上有:使用數組日期過濾功能
struct MyData {
var gluc = Int()
var fec = Date()
var alimento = Int()
var comentarios = String()
}
var dataArrayOrdered = [MyData]()
func didUpdateGraph(alimentos: NSInteger, fecI: Date?, fecF: Date?, gluc: Bool, insul: Bool) {
var newDataArray = dataArrayOrdered
if alimentos == 6 {
newDataArray = dataArrayOrdered
} else {
newDataArray = dataArrayOrdered.filter{$0.alimento == alimentos}
}
if fecI != nil && fecF != nil {
newDataArray = newDataArray.filter{$0.fec >= fecI! && $0.fec <= fecF!}
} else {
if fecI != nil && fecF == nil {
newDataArray = newDataArray.filter{$0.fec >= fecI!}
} else {
if fecI == nil && fecF != nil {
newDataArray = newDataArray.filter{$0.fec <= fecF!}
}
}
}
setChartData(data: newDataArray)
}
當用戶關閉與協議的PopUpViewController該函數的調用:
protocol ParentViewControllerDelegate2 {
func didUpdateGraph(alimentos: NSInteger, fecI: Date?, fecF: Date?, gluc: Bool, insul: Bool)
}
關閉之前的PopUpViewController中的代碼是:
@IBAction func editG(_ sender: Any) {
var gluc: true
var ins: true
var fechaInicio: Date?
var fechaFin: Date?
var alimento = 6
if (alimentosText) != nil {
if alimentosText.text == "En Ayunas" {
alimento = 0
} else {
if alimentosText.text == "Despues de desayunar" {
alimento = 1
} else {
if alimentosText.text == "Antes de comer" {
alimento = 2
} else {
if alimentosText.text == "Despues de comer" {
alimento = 3
} else {
if alimentosText.text == "Antes de cenar" {
alimento = 4
} else {
if alimentosText.text == "Despues de cenar" {
alimento = 5
}
}
}
}
}
}
}
if let fI = datePickerTxt {
fechaInicio = datePicker.date
}
if let fF = datePickerTxt2 {
fechaFin = datePicker2.date
}
delegate?.didUpdateGraph(alimentos: alimento, fecI: fechaInicio, fecF: fechaFin, gluc: true, insul: true)
self.view.removeFromSuperview()
}
因此尋找在alimentos
中包含一定值的元素工作正常,但在日期部分沒有任何區別;我在每種情況下添加了打印聲明,甚至沒有輸入任何日期條件,這使我認爲!= nil
條件不適合日期,但我無法找到任何其他選項來查看如果有任何信息存儲在該變量中。
謝謝。
沒有錯,可選的包裝日期。但是顯示'didUpdateGraph'實際上是如何調用的。也許日期真的是零。我們怎麼知道?顯示實際數據,實際代碼。足以讓我們重現問題。 – matt
謝謝,我在self.view.removeFromSuperview()之前的日期和第一個if語句之前的另一個函數內部添加了一個打印語句,並且日期值是有效的,所以它們不是無 – Enrique
您還沒有證明了。事實上,你的代碼正好相反。在你的代碼中,'fechaInicio'和'fechaFin'_are_nil,所以你用'fecI'和'fecF'調用'didUpdateGraph'都是零。 – matt