Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中显示日历日期_Ios_Swift_Date_Calendar - Fatal编程技术网

Ios 在Swift中显示日历日期

Ios 在Swift中显示日历日期,ios,swift,date,calendar,Ios,Swift,Date,Calendar,我正在尝试为IOS建立一个每周日历 该示例代码的问题是:日期数组的使用 let dates = ["7/10/2017", "7/11/2017", "7/12/2017", "7/13/2017", "7/14/2017", "7/15/2017", "7/16/2017"] func spreadsheetView(_ spreadsheetView: SpreadsheetView, cellForItemAt indexPath: IndexPath) -> Cell? {

我正在尝试为IOS建立一个每周日历

该示例代码的问题是:日期数组的使用

let dates = ["7/10/2017", "7/11/2017", "7/12/2017", "7/13/2017", "7/14/2017", "7/15/2017", "7/16/2017"]

func spreadsheetView(_ spreadsheetView: SpreadsheetView, cellForItemAt indexPath: IndexPath) -> Cell? {
    if case (1...(dates.count + 1), 0) = (indexPath.column, indexPath.row) {
        let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: String(describing: DateCell.self), for: indexPath) as! DateCell

        cell.label.text = dates[indexPath.column - 1]

        return cell
用2000年1月1日至2099年12月31日的真实日期填充该数组会导致应用程序的性能非常差


有人知道如何以更优雅的方式显示当前日期吗?

您可以使用以下扩展名:

请看这里:


这里有一个使用
日历枚举日期的解决方案

// 01.01.2000
let startComps = DateComponents(year: 2000, month: 1, day: 1)
let startDate = Calendar.current.date(from: startComps)!
// 31.12.2099
let endComps = DateComponents(year: 2099, month: 12, day: 31)
let endDate = Calendar.current.date(from: endComps)!

let components = DateComponents(hour: 0, minute: 0, second: 0) // midnight
var dates = [startDate]
Calendar.current.enumerateDates(startingAfter: startDate, matching: components, matchingPolicy: .nextTime) { (date, strict, stop) in
    if let date = date {
        if date <= endDate {
            dates.append(date)
        } else {
            stop = true
        }
    }
}
//01.01.2000
让startComps=DateComponents(年份:2000,月份:1,日期:1)
让startDate=Calendar.current.date(from:startComps)!
// 31.12.2099
设endComps=DateComponents(年:2099,月:12,日:31)
让endDate=Calendar.current.date(from:endComps)!
let components=DateComponents(小时:0,分钟:0,秒:0)//午夜
变量日期=[startDate]
Calendar.current.enumerateDates(startingAfter:startDate,matching:components,matchingPolicy:.nextTime){(日期,严格,停止)在
如果让日期=日期{

如果日期你真的需要一个包含大约36500个日期的数组吗?我想用另一种更优雅的方式来处理这种情况的方法是只加载显示页面任意一侧所需的数据,因此该数组最多只需要保存三年的日期。然后,当用户滑动到下一页时,你刷新数组日期页。
let dates = Date().generateDatesArrayBetweenTwoDates(startDate: Your Start Date Object , endDate: Your End Date Object)
// 01.01.2000
let startComps = DateComponents(year: 2000, month: 1, day: 1)
let startDate = Calendar.current.date(from: startComps)!
// 31.12.2099
let endComps = DateComponents(year: 2099, month: 12, day: 31)
let endDate = Calendar.current.date(from: endComps)!

let components = DateComponents(hour: 0, minute: 0, second: 0) // midnight
var dates = [startDate]
Calendar.current.enumerateDates(startingAfter: startDate, matching: components, matchingPolicy: .nextTime) { (date, strict, stop) in
    if let date = date {
        if date <= endDate {
            dates.append(date)
        } else {
            stop = true
        }
    }
}