You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

88 lines
2.8 KiB

//
// TodayDataStore.swift
// TodayExtension
//
// Created by Marcos Rodriguez on 11/3/19.
// Copyright © 2019 Facebook. All rights reserved.
//
import Foundation
struct TodayDataStore {
let rate: String
let lastUpdate: String
var formattedDate: String? {
let isoDateFormatter = ISO8601DateFormatter()
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = .short
dateFormatter.dateStyle = .short
if let date = isoDateFormatter.date(from: lastUpdate) {
return dateFormatter.string(from: date)
}
return nil
}
var rateDoubleValue: Double? {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.locale = Locale(identifier: API.getUserPreferredCurrencyLocale())
numberFormatter.maximumFractionDigits = 2
numberFormatter.minimumFractionDigits = 2
if let rateDoubleValue = numberFormatter.number(from: rate) {
return rateDoubleValue.doubleValue
}
return nil
}
var formattedRate: String? {
let numberFormatter = NumberFormatter()
numberFormatter.locale = Locale(identifier: API.getUserPreferredCurrencyLocale())
numberFormatter.numberStyle = .decimal
numberFormatter.maximumFractionDigits = 2
numberFormatter.minimumFractionDigits = 2
if let rateNumber = numberFormatter.number(from: rate) {
numberFormatter.numberStyle = .currency
return numberFormatter.string(from: rateNumber);
}
return rate
}
}
class TodayData {
static let TodayDataStoreKey = "TodayDataStoreKey"
static let TodayCachedDataStoreKey = "TodayCachedDataStoreKey"
static func savePriceRateAndLastUpdate(rate: String, lastUpdate: String) {
UserDefaults.standard.setValue(["rate": rate, "lastUpdate": lastUpdate], forKey: TodayDataStoreKey)
UserDefaults.standard.synchronize()
}
static func getPriceRateAndLastUpdate() -> TodayDataStore? {
guard let dataStore = UserDefaults.standard.value(forKey: TodayDataStoreKey) as? [String: String], let rate = dataStore["rate"], let lastUpdate = dataStore["lastUpdate"] else {
return nil
}
return TodayDataStore(rate: rate, lastUpdate: lastUpdate)
}
static func saveCachePriceRateAndLastUpdate(rate: String, lastUpdate: String) {
UserDefaults.standard.setValue(["rate": rate, "lastUpdate": lastUpdate], forKey: TodayCachedDataStoreKey)
UserDefaults.standard.synchronize()
}
static func getCachedPriceRateAndLastUpdate() -> TodayDataStore? {
guard let dataStore = UserDefaults.standard.value(forKey: TodayCachedDataStoreKey) as? [String: String], var rate = dataStore["rate"], let lastUpdate = dataStore["lastUpdate"] else {
return nil
}
rate = rate.replacingOccurrences(of: ",", with: "");
return TodayDataStore(rate: rate, lastUpdate: lastUpdate)
}
}