我正在创建一个按钮,当单击该按钮时会将当前日期和时间添加到数组,但是当我尝试追加到数组时,它只会追加一次而不重复该过程
条目结构:
struct Enteries {
var dates:[String] = []
}
将日期转换为字符串:
func DateConverter(){
format.timeZone = .current
format.dateFormat = "yyyy-MM-dd HH:mm"
dateString = format.string(from: currentDate)
}
附加的函数:每当触发IBAction时也调用此函数
func AddToDatabase () {
var entery = Enteries()
entery.dates.append(dateString)
print(entery.dates)
}
`
您正在创建一个新的输入对象eveytime,该函数将被调用。因此,它每次都会创建一个新对象。在函数之外声明您的Entery对象。
var entery = Enteries()
func AddToDatabase () {
entery.dates.append(dateString)
print(entery.dates)
}
很喜欢,这里发生了很多事情。
lowerCamelCase
用于类型名称应为UpperCamelCase
。函数名称应为。DateConverter
,我希望它是一种类型。这是一个UpperCamelCase
名词,这就是应该命名类型的方式。但是您的函数是一个函数(这将使其他所有Swift开发人员都大吃一惊,因为它违反了他们根据Swift的命名约定建立的期望),该函数可能应该称为parseDate
。DateConverter
以哪种方式转换?是从String
到Date
,还是从Date
到String
?它的输入是什么?它的输出是什么?从好的函数名称来看,这些事情应该是显而易见的,但在这里不了解实现就完全不知道。DateConverter
函数不会从参数中获取输入,而是返回结果,而是从变量currentDate
中获取输入,并通过变量dateString
返回结果。这确实很糟糕,原因有几个:(Date) -> String
的简单函数复杂。Enteries.dates
的默认值为[]
,如果要在创建后立即附加它,这似乎不是一个好主意。而是通过初始化参数获取数组。Enteries.dates
具有类型[String]
。为什么?!您已经有Date
个对象,将其存储!"2019-12-24
中”,它们开始进行时髦的解析,拆分,联接,而这完全是一团糟。这是我改进此代码的方法:
struct Enteries {
var dates: [Date]
}
// Call this from your view layer, only when you're about to present a `Date` to a user.
func parse(date: Date) -> String {
let df = DateFormatter()
df.timeZone = .current
df.dateFormat = "yyyy-MM-dd HH:mm"
dateString = format.string(from: currentDate)
}
func addToDatabase() {
let entery = Enteries(dates: [dateString])
print(entery.dates)
}