iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 19
0
Software Development

iOS 從 Objective-c 進化為 Swift 的 30天之旅系列 第 19

[Day 19] Swift delegate 機制(代理)和 protocol(協議)

  • 分享至 

  • xImage
  •  

前言

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


上一篇
[Day 18] iOS Enum 簡單使用範例
下一篇
[Day 20] Swift 中contains和set的使用 找重複數值用我就對了
系列文
iOS 從 Objective-c 進化為 Swift 的 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言