I am trying to use a property root
as default parameter in add
function as below and it is giving me an error:
Cannot use instance member 'root' as a default parameter .
However, when I am using root
in a nested function search
it is working fine.
class Trie {
var root = TrieNode()
func add(value: String, node: TrieNode? = root) { // error
var myNode = node
if myNode == nil {
myNode = root
}
if value.count == 0 {
node?.setEnd()
return
} else if myNode!.keys[String(value.first!)] == nil {
myNode!.keys[String(value.first!)] = TrieNode()
return add(value: String(value.dropFirst()), node: myNode!.keys[String(value.first!)])
} else {
return add(value: String(value.dropFirst()), node: myNode!.keys[String(value.first!)])
}
}
func allWords() -> [String] {
var words = [String]()
func search(node: TrieNode = root, string: String) { // Here it is working fine.
if node.keys.count != 0 {
for key in node.keys.keys {
search(node: node.keys[key]!, string: string+key)
}
if node.isEnd {
words.append(string)
}
} else {
if string.count > 0 {
words.append(string)
}
}
}
search(node: self.root, string: "")
return words
}
}
Can someone tell me why I am not able to use a property as the default parameter?