Skip to content

Instantly share code, notes, and snippets.

@letatas
Last active December 27, 2021 12:20
Show Gist options
  • Save letatas/ac0b45490c7eb666def5245b348322e0 to your computer and use it in GitHub Desktop.
Save letatas/ac0b45490c7eb666def5245b348322e0 to your computer and use it in GitHub Desktop.
@dynamicMemberLookup
struct Template {
var template : String
private var data : [String:String]
var populatedTemplate : String { data.reduce(template) { $0.replacingOccurrences(of: "${\($1.key)}", with: $1.value) } }
init(template: String, data: [String:String] = [:]) {
self.template = template
self.data = data
}
subscript (dynamicMember member: String) -> CustomStringConvertible? {
get { data[member] }
set { data[member] = newValue?.description }
}
subscript (dynamicMember member: String) -> Date {
get { dateFormatter.date(from: data[member] ?? "") ?? Date(timeIntervalSince1970: 0) }
set { data[member] = dateFormatter.string(from: newValue) }
}
let dateFormatter : DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
formatter.calendar = Calendar(identifier: .gregorian)
return formatter
}()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment