2017-10-09 63 views
0

我在一年中的所有月份制作一个pickerView,我想创建一个数组,当前月份在pickerView的开头,接下来的一个月等等。我已经在所有的月份中填充了pickerView和数组,并且我也获得了当前日期。如何制作当前月份和接下来几个月的数组。

let Months = ["January","Febrary","March","April","May","June","July","August","September","October","November","December"] 

@IBOutlet var DateLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    DateTime() 
} 

func DateTime() { 

    let time = DateFormatter() 
    let date = DateFormatter() 

    time.timeStyle = .medium 
    date.dateStyle = .full 

    print(time.string(from: Date())) 
    print(date.string(from: Date())) 

    //RiderTimeStampRequested = time.string(from: Date()) 
    DateLabel.text = date.string(from: Date()) 
} 

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return Months.count 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return Months[row] 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    print(Months[row]) 
} 
+1

仅供参考 - 不要硬编码自己的月份名称数组。从'DateFormatter monthSymbols'(或其变体之一)获取它们。 – rmaddy

回答

1

如果我理解正确,您希望获得当前月份之后所有月份的数组,包括当前月份。如果是月目前,您的数组将包含:

["July", "August", "September", "October", "November", "December"] 

要做到这一点,我们可以使用dropFirst方法来删除一个数组的第一个X元素。

可以声明一个新的属性是这样的:

var monthsInPickerView: [String]! 

然后初始化它viewDidLoad

let calendar = Calendar.current 
let month = calendar.dateComponents([.month], from: Date()).month! 
monthsInPickerView = Array(Months.dropFirst(month - 1)) 

然后你会用monthsInPickerView作为选择器视图的数据源。

+0

我尝试实现你在这里的东西,并给我这个错误“无法指定'ArraySlice '类型的值来键入'[String]!' “在此行中monthsInPickerView = Months.dropFirst(month - 1)谢谢 – Roger

+0

@Roger请参阅编辑。 – Sweeper

+0

它的工作原理!非常感谢你,最后一件事,我如何不断重复这几个月? 12月份回到1月份之后,等待几个月。 – Roger

相关问题