Last active
December 27, 2021 12:20
-
-
Save letatas/ac0b45490c7eb666def5245b348322e0 to your computer and use it in GitHub Desktop.
Code used in the medium article https://medium.com/@letatas/minimal-templating-system-in-swift-in-only-10-lines-b031963150e7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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