我试图使用全局变量从Firebase加载,有些数字将用于倒计时。
这是我的根:
{
"Guests" : {
"V2016040517" : {
"ExpirationDate" : "09/01/2018",
"yearsend" : "2017",
"monthsend" : "01",
"secondsend" : "10"
}
}
}
问题是,我不能将字符串用作int。如果我删除双引号,Firebase控制台会给我错误。
func popolalista() {
if a == a {
lista.append("")
}
if b == b {
//print current date
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyy:MM:dd:hh:mm:ss"
let result = formatter.string(from: date)
lista.append(result)
}
//calculating process
func dateComponents(_ components: Set<Calendar.Component>,
from start: Date, to end: Date) -> DateComponents
{
let components:[Calendar.Component] = [.hour, .minute]
let timeDifference = Calendar.dateComponents(from: Calendar.current, to: expdate)
let timeFormatter = DateFormatter()
let date = Date()
let calendar = Calendar.current
let year = calendar.component(.year, from: date)
let month = calendar.component(.month, from: date)
let day = calendar.component(.day, from: date)
let hour = calendar.component(.hour, from: stopTime!)
let minute = calendar.component(.minute, from: stopTime!)
stopTime = calendar.date(bySetting: .year, value: year, of: stopTime!)
stopTime = calendar.date(bySetting: .month, value: month, of: stopTime!)
stopTime = calendar.date(bySetting: .day, value: day, of: stopTime!)
stopTime = calendar.date(bySetting: .hour, value: hour, of: stopTime!)
stopTime = calendar.date(bySetting: .minute, value: minute, of: stopTime!)
}
}
我不明白为什么这不起作用。
计时器从当前日期开始到var&#34; expdate&#34;来自数据库。
修改
我终于成功了!!我找到了算法,但对于viewcontroller ...我还是要为tableviewcontroller开发这个挑战。它没有自动更新......为什么?
ViewController版本(效果很好)
import UIKit
import Foundation
class countdown: UIViewController {
@IBOutlet weak var dateLabelOutlet: UILabel!
var data = "15/09/2018 01:09"
let currentDate = Date()
let dateFormatter = DateFormatter()
let userCalendar = Calendar.current
let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second,.month,.year]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
timer.fire()
}
func printTime()
{
dateFormatter.dateFormat = "dd/MM/yyyy hh:mm"
let startTime = Date()
let endTime = dateFormatter.date(from: data)
let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!)
dateLabelOutlet.text = "\(timeDifference.year!) Anni \(timeDifference.month!) Mesi \(timeDifference.day!) Giorni \(timeDifference.hour!) Ore \(timeDifference.minute!) Minuti \(timeDifference.second!) Secondi"
if timeDifference.second! < 0 {
dateLabelOutlet.text = "Servizio scaduto"
}
}
}
虽然这是我的tentativi在桌面视图上进行的:
import UIKit
import Foundation
class Testios: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var Tabella: UITableView!
var lista: [String] = []
var data = "16/09/2018"
var a: String?
var b: String?
let currentDate = Date()
let dateFormatter = DateFormatter()
let userCalendar = Calendar.current
let requestedComponent: Set<Calendar.Component> = [.day,.hour,.minute,.second,.month,.year]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return lista.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Testios", for: indexPath)
cell.textLabel?.text = lista[indexPath.row]
return cell
}
override func viewDidLoad() {
super.viewDidLoad()
popolalista()
let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true)
timer.fire()
}
func printTime()
{
var test = ""
dateFormatter.dateFormat = "dd/MM/yyyy"
let startTime = Date()
let endTime = dateFormatter.date(from: data)
let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!)
let dateLabelOutlet = "\(timeDifference.year!) Anni \(timeDifference.month!) Mesi \(timeDifference.day!) Giorni \(timeDifference.hour!) Ore \(timeDifference.minute!) Minuti \(timeDifference.second!) Secondi"
if timeDifference.second! < 0 {
test = "Servizio scaduto"
}
else {
test = dateLabelOutlet
}
lista.append(test)
}
func popolalista() {
}
}