Skip to content

Instantly share code, notes, and snippets.

@warren-gavin
Last active June 11, 2016 12:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save warren-gavin/c5393c3e85435b4fac451da020a4320a to your computer and use it in GitHub Desktop.
Save warren-gavin/c5393c3e85435b4fac451da020a4320a to your computer and use it in GitHub Desktop.
struct Hole {
let length: Int
let number: Int
let par: Int
}
struct GolfCourse {
let name: String
let holes: [Hole]
}
{
"name": "My Course",
"holes": [
{
"number": 1,
"length": 143,
"par": 3
},
{
"number": 2,
"length": 340,
"par": 4
}
]
}
typealias JSONFormat = [String: AnyObject]
extension Hole {
typealias Format = JSONFormat
init?(_ holeInfo: Format) {
guard let length = holeInfo["length"] as? Int, let number = holeInfo["number"] as? Int, let par = holeInfo["par"] as? Int else {
return nil
}
self.length = length
self.number = number
self.par = par
}
}
extension GolfCourse {
typealias Format = JSONFormat
init?(_ courseInfo: Format) {
guard let name = courseInfo["name"] as? String,
let holeInfo = courseInfo["holes"],
let holes = (holeInfo as? [Hole.Format])?.flatMap({ Hole($0) }) where holes.count == holeInfo.count else {
return nil
}
self.name = name
self.holes = holes
}
}
extension Hole {
typealias Format = [String: Int]
init?(_ holeInfo: Format) {
guard let length = holeInfo["length"], let number = holeInfo["number"], let par = holeInfo["par"] else {
return nil
}
self.length = length
self.number = number
self.par = par
}
}
protocol JSONType {
}
extension NSString: JSONType {}
extension NSNumber: JSONType {}
extension NSArray: JSONType {}
extension NSDictionary: JSONType {}
typealias JSONFormat= [String: JSONType]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment