前言

上次我使用MVC創建專案
所以流程是controller會add一個view
這樣的話controller就是view的父類別
今天就是要研究
如何讓父子重逢
互相呼叫傳值

父類別呼叫子類別

這就比較簡單
單純宣告子類別
直接可以使用該類別呼叫他的func

在父類別controller宣告
子類別TestView的變數
直接就可以使用TestView的testFunc Func
還蠻簡單的

let testView = TestView.init(frame: CGRect.init(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: UIScreen.main.bounds.width, height:  
print(testView.testFunc())

子類別呼叫父類別

有時候要傳值給父類別的話
可能要透過呼叫父類別的func

初始化先新增子類別

override func viewDidLoad() {
    super.viewDidLoad()
    let testView = TestView.init(frame: CGRect.init(x: self.view.frame.origin.x, y: self.view.frame.origin.y, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height));
    testView.delegate = self
    self.view.addSubview(testView);
}

並且新增一個func準備給別人呼叫

func fatherFunc() -> String  {
    return "fatherFunc"
}

在子類別新增 Protocol

protocol takoProtocol {
    func fatherFunc () -> String
}

在Class裡面宣告delegate

var delegate:takoProtocol?

基本設定是完成了
再來新增一個暫時Button來Demo

@IBAction func clickTestBtn(_ sender: Any) {
    print(delegate!.fatherFunc())
}

這時候點擊按鈕就可以呼叫到父類別的fatherFunc
得到結果為

fatherFunc

這概念也是從OC轉過來
不知道Swift是不是也是這樣呼叫的
或是有更好的方法

這方法我先放在Git上給大家下載
Demo Link
Git


Categorized in: