Skip to content

Instantly share code, notes, and snippets.

@freedom27
Last active December 16, 2015 17:05
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 freedom27/c513a3d7c377caa75a99 to your computer and use it in GitHub Desktop.
Save freedom27/c513a3d7c377caa75a99 to your computer and use it in GitHub Desktop.
Experimenting with Swift's protocols and trees
protocol HasName {
var name: String { get }
}
protocol HasSubNodes: HasName {
var subNodes: [HasName] { get }
}
protocol HasData: HasName {
var data: String { get }
}
class Folder: HasSubNodes {
var name: String
var subNodes = [HasName]()
init(name: String) {
self.name = name
}
}
class File: HasData {
var name: String
var data: String
init(name: String, andData data: String) {
self.name = name
self.data = data
}
}
let root = Folder(name:"root")
let folder1 = Folder(name:"Folder1")
let file1 = File(name:"File1", andData: "Content of file 1")
let file2 = File(name:"File2", andData: "Content of file 2")
root.subNodes.append(folder1)
root.subNodes.append(file1)
folder1.subNodes.append(file2)
let folder2 = Folder(name:"Folder2")
folder1.subNodes.append(folder2)
let file3 = File(name:"File3", andData: "Content of file 3")
folder2.subNodes.append(file3)
func printTreeForNode(node: HasName, andLevel level: Int) {
let prefix = String(count: level, repeatedValue: Character("-"))
print(prefix+node.name)
if let folder = node as? HasSubNodes {
for subNode in folder.subNodes {
printTreeForNode(subNode, andLevel: level+1)
}
}
}
printTreeForNode(root, andLevel: 1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment