Last active
December 16, 2015 17:05
-
-
Save freedom27/c513a3d7c377caa75a99 to your computer and use it in GitHub Desktop.
Experimenting with Swift's protocols and trees
This file contains 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
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