, ( ). , , "" , . "" :
protocol _Parent {
var anyChildren: [Any] { get set }
}
protocol Parent: _Parent {
typealias Child
var children: [Child] { get set }
}
extension Parent {
var anyChildren: [Any] {
get {
return children.map{ $0 as Any }
}
set {
children = newValue.flatMap{ $0 as? Child }
}
}
}
protocol _Child {
var anyParent: Any { get set }
}
protocol Child: _Child {
typealias Parent
var parent: Parent { get set }
}
extension Child {
var anyParent: Any {
get {
return parent
}
set {
parent = newValue as! Parent
}
}
}
:
class Foo: Parent {
var children = [Foo]()
}
let anything: Any = Foo()
if let aDynamicParent = anything as? _Parent {
aDynamicParent.anyChildren.map{ $0 as! Foo }
aDynamicParent.children = [Foo(), Foo(), Foo()]
}