Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class UIView{
- var subViews : [UIView]
- var superView : UIView?
- var val : Character
- init(_ char: Character) {
- subViews = [UIView]()
- val = char
- }
- }
- let A = UIView("A")
- let B = UIView("B")
- let C = UIView("C")
- let D = UIView("D")
- let E = UIView("E")
- let a = UIView("a")
- let b = UIView("b")
- let c = UIView("c")
- let d = UIView("d")
- let e = UIView("e")
- d.subViews.append(e)
- e.superView = d
- D.subViews.append(E)
- E.superView = D
- a.subViews = [b,c,d]
- b.superView = a
- c.superView = a
- d.superView = a
- A.subViews = [B,C,D]
- class viewIterator{
- var cur : UIView?
- init(_ rootView: UIView){
- cur = rootView
- moveChild()
- }
- private func moveChild(){
- guard let currV = cur else {
- return
- }
- var runner = currV
- while runner.subViews.count > 0 {
- runner = runner.subViews[0]
- }
- cur = runner
- }
- func hasNext() -> Bool{
- return cur != nil
- }
- func next() -> UIView?{
- guard let curView = cur else {
- return nil
- }
- let ans = curView
- if let superv = curView.superView {
- if let index = superv.subViews.firstIndex(where: { (view) -> Bool in
- view === cur
- }){
- if index == superv.subViews.count - 1 {
- cur = superv
- }else{
- cur = superv.subViews[index + 1]
- moveChild()
- }
- }
- }else{
- cur = nil
- }
- return ans
- }
- }
- let iterator = viewIterator(a)
- print(iterator.hasNext())
- print(iterator.hasNext())
- print(iterator.hasNext())
- print(iterator.next()?.val)
- print(iterator.next()?.val)
- print(iterator.next()?.val)
- print(iterator.next()?.val)
- print(iterator.next()?.val)
- print(iterator.next()?.val)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement