上次我使用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