2015-08-25 25 views
0

我有一個數組與不同的UIViews,但這些UIViews具有相同的方法誰做不同的事情,我想調用這些方法。我的數組是創建爲當我試圖調用該方法時,它不存在到UIView類。在數組中調用UIView的自定義函數

import UIKit 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
    super.viewDidLoad() 

    var pages:Array<UIView> = [] 

    let view1:View1 = View1(frame: CGRectMake(0, 0 , 100 , 100)) 
    view1.backgroundColor = UIColor.blueColor() 
    pages.append(view1) 

    let view2:View2 = View2(frame: CGRectMake(100, 100 , 100 , 100)) 
    view2.backgroundColor = UIColor.redColor() 
    pages.append(view2) 

    let view3:View3 = View3(frame: CGRectMake(200, 200 , 100 , 100)) 
    view3.backgroundColor = UIColor.orangeColor() 
    pages.append(view3) 

    //This work 
    for myView in pages { 
     self.view.addSubview(myView) 
    } 

    // I would like to call a generic function into a uiview class into array 
    for myView in pages { 
     myView.generic() 
    } 

    } 

    class View1: UIView { 

    override init(frame: CGRect ) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func generic(){ 
     println("A, B, C") 
    } 

    } 

    class View2: UIView { 

    override init(frame: CGRect ) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func generic(){ 
     println("X, Y, Z") 
    } 

    } 

    class View3: UIView { 

    override init(frame: CGRect ) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func generic(){ 
     println("1, 2, 3") 
    } 

    } 

    override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
    } 
} 

回答

0

不是把這些意見UIView的,他們共同的超類,我們可以聲明一個協議,使這些觀點都符合它。現在

class View1: UIView, GenericProtocol { /* ... */ } 
// for each class 

而且,讓我們的數組持有GenericProtocol對象:現在

protocol GenericProtocol { 
    func generic() 
} 

,在類的定義,添加這個一致性

var pages = [GenericProtocol]() 

後,我們已經裝滿它,我們現在可以在forin之上,並且可以撥打任何在GenericProtocol上聲明的成員:

for page in pages { 
    page.generic() 
} 
+0

和平的蛋糕,謝謝 –