2015-08-09 2 views
-1

Im делает простое приложение планировщика, которое отправляет уведомления пользователям в определенное время, когда происходят события.Как выводить даты из массива в Swift?

Я создал таблицу для хранения данных, и я сохраняю отдельные значения внутри массива.

Я столкнулся с проблемой вывода NSDates, которые я сохранил внутри своего массива.

import UIKit 


extension NSDate { 

convenience init(dateString:String, format:String="h-mm a") { 
    let formatter = NSDateFormatter() 
    formatter.timeZone = NSTimeZone.defaultTimeZone() 
    formatter.dateFormat = format 
    let d = formatter.dateFromString(dateString) 
    self.init(timeInterval:0, sinceDate:d!) 
} 

class MedicineTableViewController: UITableViewController { 

//MARK Properties 

var medicines = [Medicine]() 



override func viewDidLoad() { 
    super.viewDidLoad() 

    loadSampleMedicine() 
} 

func loadSampleMedicine() { 

    let medicine1 = Medicine(name: "Inhaler", time1: NSDate(dateString: "08:00 a"), time2: NSDate(dateString: "10:00 a"), time3: NSDate(dateString: "02:00 p"), time4: NSDate(dateString: "06:00 p"), time5: NSDate(dateString: "10:00 p")) 
    medicines.append(medicine1!) 
} 

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return medicines.count 

} 




override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cellIdentifier = "MedicineTableViewCell" 
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MedicineTableViewCell 
    let medicine = medicines[indexPath.row] 

    cell.nameLabel.text = medicine.name 
    cell.takeAt.text = "Take At:" 
    cell.time1Label.text = medicine.time1 
    cell.time2Label.text = medicine.time2 
    cell.time3Label.text = medicine.time3 
    cell.time4Label.text = medicine.time4 
    cell.time5Label.text = medicine.time5 


    return cell 
} 

Это возвращает ошибку «Не удается присвоить значение„NSDate“к значению типа String?»

Есть ли способ конвертировать эти NSDates в строки?

У меня появилось другое возможное решение, но оно включает в себя переработку всего приложения, поэтому я бы предпочел избежать их, если это возможно.

Моим возможным решением является переработать данные, которые пользователь вводит в качестве pickerView, который имеет 3 столбца, один из которых циклически перемещает числа от 01 до 12, второй 00 до 59 и третий am и pm. а затем взять общую строку и сохранить ее в массиве. Это позволит мне легко распечатать его, поскольку это всего лишь сохраненная строка. Затем, когда я выхожу на сцену, на которой я создаю систему уведомлений, я мог бы использовать функцию dateString для преобразования из строк в даты и затем программировать мои уведомления.

В общем, я хотел бы знать, могу ли я просто распечатать NSDates, хранящиеся в моем массиве, или если нет, если мое возможное решение будет работать?

Спасибо.

+0

* «Есть ли способ, чтобы преобразовать эти NSDates в строки?» * - Да, это называется NSDateFormatter, который имеет свой собственный тег здесь: [тег: nsdateformatter]. Это также [документация] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1) от Apple. –

+0

Хорошо спасибо за помощь :) – gibby97

ответ

1

Вы можете использовать NSDateFormatter. Существует функция, называемая stringFromDate. Вот пример.

var date = NSDate() //Or whatever your date is 

var stringDate = NSDateFormatter().stringFromDate(date) 
Смежные вопросы