【发布时间】:2017-08-01 14:26:37
【问题描述】:
我正在学习在 SWIFT 中编程,并且正在将我的第一个应用程序作为一个项目来开发。我正在制作一个带有结构数组作为数据的图表,但我想过滤它并仅绘制用户需要查看的内容。我正在使用.filter 函数,它可以很好地过滤包含给定整数作为变量的元素。但是在日期部分我不能让它工作,我希望用户能够选择一个日期范围;这是我实际拥有的代码:
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的实际调用方式。也许日期真的 为零。我们怎么知道?显示实际数据,实际代码。足以让我们重现问题。 -
谢谢,我在 self.view.removeFromSuperview() 之前添加了日期的打印语句,并在函数内部添加了另一个语句,在第一个 if 语句之前,日期有值,所以他们不是零
-
你还没有证明这一点。事实上,您的代码正好相反。在您的代码中,
fechaInicio和fechaFin为零,因此您使用fecI和fecF都为 nil 调用didUpdateGraph。