Ios 优化代码:迭代UIViewcontroller的子类

Ios 优化代码:迭代UIViewcontroller的子类,ios,iphone,swift,loops,Ios,Iphone,Swift,Loops,我是swift的新手,所以我有一个关于我试图创建的代码的基本问题 我有一个UIScrollView,我想添加多个UIViewController 这是我最初使用的代码: let obj1 = self.storyboard?.instantiateViewController(withIdentifier: "Page1VC") as! Page1VC let obj2 = self.storyboard?.instantiateViewController(withIdenti

我是swift的新手,所以我有一个关于我试图创建的代码的基本问题

我有一个
UIScrollView
,我想添加多个
UIViewController

这是我最初使用的代码:

let obj1 = self.storyboard?.instantiateViewController(withIdentifier: "Page1VC") as! Page1VC
        let obj2 = self.storyboard?.instantiateViewController(withIdentifier: "Page2VC") as! Page2VC
        let obj3 = self.storyboard?.instantiateViewController(withIdentifier: "Page3VC") as! Page3VC
        let obj4 = self.storyboard?.instantiateViewController(withIdentifier: "Page4VC") as! Page4VC
        let obj5 = self.storyboard?.instantiateViewController(withIdentifier: "Page5VC") as! Page5VC

        self.containerScrollView.addSubview(obj2.view)
        obj2.willMove(toParentViewController: self)
        self.addChildViewController(obj2)

        self.containerScrollView.addSubview(obj1.view)
        obj1.willMove(toParentViewController: self)
        self.addChildViewController(obj1)

        self.containerScrollView.addSubview(obj3.view)
        obj3.willMove(toParentViewController: self)
        self.addChildViewController(obj3)

        self.containerScrollView.addSubview(obj4.view)
        obj4.willMove(toParentViewController: self)
        self.addChildViewController(obj4)

        self.containerScrollView.addSubview(obj5.view)
        obj5.willMove(toParentViewController: self)
        self.addChildViewController(obj5)

        obj1.view.frame.origin =  CGPoint.init(x: 0, y: 0)
        obj2.view.frame.origin =  CGPoint.init(x: UIScreen.main.bounds.width, y: 0)
        obj3.view.frame.origin = CGPoint.init(x: 2*UIScreen.main.bounds.width, y: 0)
        obj4.view.frame.origin = CGPoint.init(x: 3*UIScreen.main.bounds.width, y: 0)
        obj5.view.frame.origin = CGPoint.init(x: 4*UIScreen.main.bounds.width, y: 0)
我希望我们都能同意,这一准则不是很好和/或很灵活。我想为我的
UIScrollView
实现任意数量的页面,因此我得出结论,为此我需要一个循环

我最终得到了以下代码:

repeat {
            let vc = (self.storyboard?.instantiateViewController(withIdentifier: "Page\(x+1)VC"))!
            obj.append(vc)
            self.containerScrollView.addSubview(obj[x].view)
            obj[x].willMove(toParentViewController: self)
            self.addChildViewController(obj[x])
            obj[x].view.frame.origin =  CGPoint(x: (CGFloat(x))*UIScreen.main.bounds.width, y: 0)
            x += 1
            print("Page \(x) sucessfully initialized")
        } while (x < segmentControl.numberOfSegments)
我用粗体标出了这些变化。 该代码显然不起作用,因为无法将
UIViewController
的类型声明为
as!第**\(x+1)页)**VC


所有这些都引出了我的问题:我是否可以使用循环遍历不同的子类,如长版本代码中所述?或者我必须求助于我的代码的长版本吗?

如果你总是在
setup()
中做“类似的事情”,你可以使用一个协议,每个VC都会遵守。否则,您可以创建所有VC元素,对它们进行设置,然后将它们放入一个数组并循环该数组。谢谢您的回复。这也是我的想法,但它将使我无法创建任意数量的
UIViewController
。我通常可以有一个函数,传入一个数字,然后根据该数字创建x个
UIViewController
,但我需要先编写非循环代码。我会试试的,谢谢!
repeat {
            let vc = (self.storyboard?.instantiateViewController(withIdentifier: "Page\(x+1)VC"))! as! Page**\(x+1)**VC
            **vc.setup = setup**
            obj.append(vc)
            self.containerScrollView.addSubview(obj[x].view)
            obj[x].willMove(toParentViewController: self)
            self.addChildViewController(obj[x])
            obj[x].view.frame.origin =  CGPoint(x: (CGFloat(x))*UIScreen.main.bounds.width, y: 0)
            x += 1
            print("Page \(x) sucessfully initialized")
        } while (x < segmentControl.numberOfSegments)