Можно ли использовать self
в качестве параметра по умолчанию в Swift? Этот код выглядит довольно прямолинейно, но я не понимаю сообщения, которое компилятор отбрасывает:
func printTree(node: TreeNode = self, tabs: String = "") {
println(tabs + node.name!)
node.children.forEach { printTree(node: $0, tabs: tabs+"\t") }
}
Ошибка:
'TreeNode -> () -> TreeNode' is not convertible to 'TreeNode'
А?
Есть, вероятно, другие способы, с помощью которых я мог бы решить обход дерева, но на самом деле мне просто интересно установить ограничение по умолчанию. Это настоящая вещь? Есть ли упоминание об этом в документах? Я не мог найти его.
Update:
Я сделал это с нуля без каких-либо зависимостей (у меня была иерархия класса и пользовательский патч forEach
, который использовался ранее). Это все еще ошибки:
class PeanutButterJelly {
var children: [PeanutButterJelly]?
func doDance(){ println("dancing") }
func everybodyDanceNow(pbj: PeanutButterJelly = self) {
pbj.doDance()
if let children = pbj.children {
for child in children { child.doDance() }
}
}
}
Ошибка:
Swift compilation error: unresolved identifier 'self'
Xcode 6.3.2