Skip to content

Instantly share code, notes, and snippets.

@fluidsonic
Last active December 11, 2015 15:58
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 fluidsonic/6a8f1c1def2a92416519 to your computer and use it in GitHub Desktop.
Save fluidsonic/6a8f1c1def2a92416519 to your computer and use it in GitHub Desktop.
Recursive Struct through Indirect Enum
struct Path: CustomStringConvertible {
private var hasParent = HasParent.No
var key: String
init(forKey key: String, inParent parent: Path? = nil) {
self.key = key
self.parent = parent
}
var description: String {
if let parent = parent {
return "\(parent).\(key)"
}
else {
return key
}
}
var parent: Path? {
get {
switch hasParent {
case .No: return nil
case let .Yes(parent): return parent
}
}
set {
if let parent = newValue {
hasParent = .Yes(parent)
}
else {
hasParent = .No
}
}
}
private enum HasParent {
case No
indirect case Yes(Path)
}
}
let level0 = Path(forKey: "level0")
let level1 = Path(forKey: "level1", inParent: level0)
let level2 = Path(forKey: "level2", inParent: level1)
let level3 = Path(forKey: "level3", inParent: level2)
print(level3)
// output: level0.level1.level2.level3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment