Swift3.0 Delegate和Block的實現

weixin_33859844發表於2017-07-06

Swift3.0 中代理的使用方法
一、宣告協議
1.制定協議

protocol DelegateName:NSObjectProtocol {
    //設定協議方法
    func method()
}

盛京三四線


2.用weak定義代理

weak var delegate:DelegateName?

3.判斷代理是否存在,讓代理去執行方法

func clickButton() {
    //'?'代替了responsed
    delegate?.method()
}

注:不寫NSObjectProtocol不會報錯,但是寫屬性是無法寫weak。在Swift中,制定協議需要遵守NSObjectProtocol協議,除了類可以遵守協議,結構體也可以遵守協議,在OC中我們制定協議,通常繼承自NSObject,可以這樣理解,所有繼承自NSObject的物件都可以實現協議方法。

二、遵守協議
1.遵守協議

class ViewController:UIViewController,DelegateName { //遵守協議

2.設定代理為self

customView?.delegate = self

3.實現協議方法

func method() {
    print(#function)
}

Swift3.0 中Block的使用方法

  1. 在B中宣告一個block
typealias TestBlock = (String)->()
  1. 持有一個block變數
  var blo: TestBlock?  
  1. 呼叫
  self.blo?("It is block test")
  1. A中需要接受值的地方
 let b = B()
 b.blo = {str in 
    print("test block---\\(str)")
 }

相關文章