在单击时快速添加多个Array

问题描述 投票:0回答:2

我正在创建一个按钮,当单击该按钮时会将当前日期和时间添加到数组,但是当我尝试追加到数组时,它只会追加一次而不重复该过程

条目结构:

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)


}

`

arrays swift append
2个回答
1
投票

您正在创建一个新的输入对象eveytime,该函数将被调用。因此,它每次都会创建一个新对象。在函数之外声明您的Entery对象。

var entery = Enteries()
func AddToDatabase () {

        entery.dates.append(dateString)
        print(entery.dates)


    }

0
投票

很喜欢,这里发生了很多事情。

  • 首先,Swift的约定是将lowerCamelCase用于类型名称应为UpperCamelCase。函数名称应为。
  • 第二,函数名称应为动词或动词短语,类型名称应为名词。如果在某些代码中看到DateConverter,我希望它是一种类型。这是一个UpperCamelCase名词,这就是应该命名类型的方式。但是您的函数是一个函数(这将使其他所有Swift开发人员都大吃一惊,因为它违反了他们根据Swift的命名约定建立的期望),该函数可能应该称为parseDate
  • DateConverter以哪种方式转换?是从StringDate,还是从DateString?它的输入是什么?它的输出是什么?从好的函数名称来看,这些事情应该是显而易见的,但在这里不了解实现就完全不知道。
  • 至关重要的是,DateConverter函数不会从参数中获取输入,而是返回结果,而是从变量currentDate中获取输入,并通过变量dateString返回结果。这确实很糟糕,原因有几个:
  • 不可重用。您无法在没有复制/粘贴的情况下在其他地方使用此日期解析代码,这就是代码重复和复杂性产生的方式。如果您决定更改应用程序中的日期格式,则将没有可更改的中央事实来源,而是必须手动查找该功能的每个副本并进行更改,以期你什么都不会错过。不好。
  • 不是线程安全的
  • 比类型为(Date) -> String的简单函数复杂。
  • Enteries.dates的默认值为[],如果要在创建后立即附加它,这似乎不是一个好主意。而是通过初始化参数获取数组。
  • Enteries.dates具有类型[String]。为什么?!您已经有Date个对象,将其存储!
    • 它们较小(在内存中)
    • 它们与表示方式无关,这意味着以后可以根据需要为不同的界面和不同的语言环境正确格式化它们
    • 他们支持日期数学。我经常看到人们将日期存储为字符串,并问诸如“如何对日期数组进行排序?”之类的问题。 (实际上是作为字符串存储的),“如何将1天添加到"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)
}
© www.soinside.com 2019 - 2024. All rights reserved.