59 lines
1.7 KiB
Swift
59 lines
1.7 KiB
Swift
//
|
|
// Extensions.swift
|
|
// Werkout_ios
|
|
//
|
|
// Created by Trey Tartt on 6/20/23.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
extension Dictionary {
|
|
func percentEncoded() -> Data? {
|
|
map { key, value in
|
|
let escapedKey = "\(key)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
|
|
let escapedValue = "\(value)".addingPercentEncoding(withAllowedCharacters: .urlQueryValueAllowed) ?? ""
|
|
return escapedKey + "=" + escapedValue
|
|
}
|
|
.joined(separator: "&")
|
|
.data(using: .utf8)
|
|
}
|
|
}
|
|
|
|
extension CharacterSet {
|
|
static let urlQueryValueAllowed: CharacterSet = {
|
|
let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
|
|
let subDelimitersToEncode = "!$&'()*+,;="
|
|
|
|
var allowed: CharacterSet = .urlQueryAllowed
|
|
allowed.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)")
|
|
return allowed
|
|
}()
|
|
}
|
|
|
|
extension Date {
|
|
var timeFormatForUpload: String {
|
|
let isoFormatter = DateFormatter()
|
|
isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssX"
|
|
return isoFormatter.string(from: self)
|
|
}
|
|
}
|
|
|
|
extension String {
|
|
var dateFromServerDate: Date? {
|
|
let df = DateFormatter()
|
|
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ssX"
|
|
df.locale = Locale(identifier: "en_US_POSIX")
|
|
return df.date(from: self)
|
|
}
|
|
}
|
|
|
|
extension Date {
|
|
func get(_ components: Calendar.Component..., calendar: Calendar = Calendar.current) -> DateComponents {
|
|
return calendar.dateComponents(Set(components), from: self)
|
|
}
|
|
|
|
func get(_ component: Calendar.Component, calendar: Calendar = Calendar.current) -> Int {
|
|
return calendar.component(component, from: self)
|
|
}
|
|
}
|