Skip to content

Instantly share code, notes, and snippets.

@k0nserv
Created October 27, 2015 17:21
Show Gist options
  • Save k0nserv/12d52dd4c6c0ac16cdeb to your computer and use it in GitHub Desktop.
Save k0nserv/12d52dd4c6c0ac16cdeb to your computer and use it in GitHub Desktop.
JSON experiments
//: Playground - noun: a place where people can play
import UIKit
class Value<T> {
private var value: T?
private let required: Bool
var isValid: Bool {
get {
return !required || value != nil
}
}
var forcedValue: T {
get {
return value!
}
}
var optionalValue: T? {
get {
return value
}
}
init(required: Bool) {
self.value = nil;
self.required = required
}
func valueFromDictionary(dictionary: Dictionary<String, AnyObject>, key: String) {
guard let value = dictionary[key] as? T else {
return
}
self.value = value
}
}
struct PersonBuilder {
var name = Value<String>(required: true)
var age = Value<Int>(required: false)
var isValid: Bool {
get {
return name.isValid && age.isValid
}
}
}
struct Person {
let name: String
let age: Int?
init(builder: PersonBuilder) {
self.name = builder.name.forcedValue
self.age = builder.age.optionalValue
}
}
let people = [["Name": "Hugo Tunius"], ["age": 10]]
var parsed: [Person] = []
for person in people {
var builder = PersonBuilder()
builder.name.valueFromDictionary(person, key: "Name")
builder.age.valueFromDictionary(person, key: "Age")
if builder.isValid {
parsed.append(Person(builder: builder))
}
}
parsed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment